home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / COMP / ASSM.ICL next >
Encoding:
Text File  |  1993-12-27  |  151.4 KB  |  3 lines

  1. ⓪ (* --------------------------------------------------------------⓪#Modula Compiler  /4.0 /   fuer Atari ST / 68020 + 68881  V#0325⓪#--------------------------------------------------------------⓪ ⓪#File mc8: Assembler (Th. Tempelmann)⓪ ⓪#15.9.85  Labels auch ohne '!' erlaubt.⓪#16.9.85  DBcc jetzt auch bei Vorwaertsref. mit D0 bis D7 moeglich.⓪#16.9.85  Fehlermeldung bei 'ADD.X <ea>,An' eingebaut.⓪#17.9.85  Fehler bei Adr.-Art 'd8(PC,Rn.X)' behoben.⓪#18.8.85  MOVEM nun fast fehlerfrei.⓪#19.8.85  Fehlender,aber erwarteter 2. Operand wird angemeckert⓪#19.8.85  Befehle DBRA,ILLEGAL und BREAK(wie ILLEGAL) implementiert⓪#20.09.85 - 25.09.85 :⓪&- Bei AERR6 wird ID-Name ausgegeben ( z.Zt. auf Screen ).⓪&- MOVEM fehlerfrei, sowie BTST #d3,<ea>⓪&- Bei $D+ wird die Default-Size fuer Bcc auf Long gesetzt (sonst:Short).⓪&- Neue Vorwaertsref.-Verkettung bei Labels -> ERROR 208 tritt nie mehr⓪)auf !⓪&- Vorw.-ref. auf Labels nun auch mit d16(PC) und d8(PC,Rn.X) moeglich.⓪&- die Adressierungsarten PC-Relativ und SSP ausgebaut.⓪&- die Adressierungsart d16 (Absolut,nur 16 Bit) wird nicht mehr⓪)verwandt ( LEA $400,A0 erzeugt 3 Worte ! ).⓪&- Typenpruefung bei Zugriffen auf Symbole mit Fehlermeldung ( ERROR⓪)Nr. 213 ).⓪&- Neben Konstanten koennen auch RECORDs sowie Elemente aus Aufz.-Typen⓪)verwandt werden.⓪&- Am Ende eines Assembler-Teils kann nun direkt ein Label stehen,⓪)also z.B. ' EndLabel   END '.⓪&- Bei 'Bcc' auf ein schon bekanntes Label wird nicht mehr standard-⓪)maessig 'Short' als Size verwandt, sondern immer die optimale⓪)Size genommen, wenn der Branch-Befehl keine explizite Size⓪)Angabe enthaelt.⓪'- Bei Mnemonics, die nach dem TEWI 68000-Buch keiner Size-Angabe⓪)beduerfen, wird bei einer Sizeangabe ein Fehler gemeldet.⓪)⓪#29.09.85  Automatisches SYNC ausgebaut ( ausser am Ende eines⓪.Assembler-Bereichs ), jedoch Abfrage darauf ueberall, bis auf⓪.bei: DC.B , ASC , ACZ .⓪#29.09.85  ACI ausgebaut.⓪#30.09.85  Fuer A7 ist auch SP zugelassen.⓪#30.09.85  Expressionauswertung (auch Label1-Label2).⓪#30.09.85  Reglist nun auch mit 'Rn-Rm' moeglich.⓪#30.09.85  Records jetzt richtig ansprechbar.⓪#01.10.85  Jetzt hoffentlich ueberall Abfrage, ob Size da oder nicht.⓪#01.10.85  MOVEC VBR implementiert und Fehlermeldung Nr. 215 bei RTE.⓪.Dazu wurde aus dem unbenutzten Symbol 'SSP' 'VBR' gemacht.⓪#07.10.85  68010-Befehle RTD und MOVE from CCR eingefuehrt.⓪#08.10.85  Sizeangaben-Pruefung erfolgt nun nach Motorola's 68000⓪.16-Bit User's Manual. Ausnahmen:⓪.Bei Branch: auch '.S' fuer '.B' und '.L' fuer '.W' .⓪.ORI,EORI,ANDI,MOVE mit SR oder CCR: hier keine Size erlaubt.⓪#08.10.85  Fehler bei lok. Proc. behoben.⓪#08.10.85  Unterscheidung in Long- und Word/Byte-Konstanten eingefuehrt.⓪.Nun sind L-Const. bei 'd32', LEA,JMP,JSR,PEA erlaubt.⓪.Ausserdem wird am Ende von 'GetExpr' nochmal die Groesse⓪.des Datums in der Var. 'Data' ueberprueft.⓪#08.10.85  Data-Size-Abpruefung bei LINK und STOP/RTD verbessert.⓪#08.10.85  DS - Pseudo-Op implementiert.⓪#10.10.85  Sizeangaben-Pruefung nochmal veraendert (jetzt wie Motorola's⓪.680XX - User's Manual:⓪0Bei MOVE CCR oder MOVE SR ist auch '.W' erlaubt.⓪0Bei ANDI to SR, EORI to SR, ORI to SR ist '.W' erlaubt.⓪0Bei ANDI to CCR, EORI to CCR, ORI to CCR ist '.B' erlaubt.⓪#10.10.85  Range-Test ueberarbeitet und ERROR 216 eingefuehrt.⓪#11.10.85  Bei Records auch POINTER TO RECORD oder ARRAY OF RECORD moeglich.⓪#12.10.85  LEA / PEA mit allen Adr. erlaubt.⓪#13.10.85  Error 211 bei 'Bcc.S' mit Offset = Null wieder eingebaut.⓪#15.10.85  als Expr auch Typen ( RECORD, POINTER und ARRAY ) erlaubt.⓪#16.10.85  Fehler bei TRAP - Befehlsuebersetzung behoben⓪#16.10.85  'Testtype' nun in 'MN's mit direkter Angabe, ob Source⓪.oder Destination geprueft wird.⓪#17.10.85  Fehler vom 16.10.85 bei LSL, ROR usw. behoben.⓪#29.01.86  Labels auf ungeraden Adr. zugelassen;⓪-Fehler bei vorw. Ref. auf Label, das direkt hinter END steht,⓪-behoben;⓪-Fehlerhafte Uebersetzung von LSR <ea> usw. behoben.⓪#22.02.86  Neuordnung der Texte (jm)⓪#21.03.86  LINK - Inst. nun richtig ( vorher wurde immer LINK ..,#0 erzeugt)⓪#30.07.86  V3.3a: 68020-Mnemonics impl., zudem STR-Pseudo-Op, um Strings mit⓪-Längenzähler anzulegen. Neue Option: 'X+' für 68020-Befehle;⓪-Test_Ind_An: auch auf SP abgefr., somit nun auch (SP) als Adr.-Art⓪-zugelassen; BRA mit LONG-Offset sind nicht erzeugbar, da da ja nur⓪-in Prozeduren ginge, und die können sowieso nicht größer als 64KB⓪-werden. ApndD0_W/L legen Code nun direkt ab. Dadurch sind D2 u. D3⓪-jetzt während der Code-Erzeugung frei.; ASC mit ',' trennbar;⓪-DIVSL u. DIVUL nicht übersetzt, da Codierung unklar; für parameter-⓪-lose TRAPcc muß als Parameter '()' angegeben werden !; MOVES noch⓪-nicht impl. !; Nach Labeldecl. ist ein direkt angeschlossenes ':'⓪-erlaubt;⓪#08.08.86  STR-Pseudo-Op: Alle folg. Zeichen, auch die mit Komma angehängten,⓪-werden als ein String bewertet; GENSTR um Auswertung von Chars⓪-und Charconsts erweitert, Auswertung von Strconsts geht noch nicht⓪#23.11.86  Aenderungen aus V3.3b uebernommen (BYTE->BITE, alle IDs>AsmFirst⓪-um 2 erhoeht, kein Fehler bei RTE bei Atari, ConFact statt⓪-ConstEx.⓪-Achtung: Es ist nicht sicher, ob CAAR und CACR richtig gehen !⓪6Es sollte mal gepr}ft werden !⓪#02.12.86  Kein Fehler mehr bei DC.L a,b,c,... (pInstr bei PseudoOp angepasst)⓪#17.12.86  (ch) Einbau der 68881 - Befehle⓪#11. 1.87  (jm) Aenderung bei NumDat; Kommentare bei '%%%%'⓪#15. 1.87  (jm) bei MOVEQ wieder Argumente -128 <= x <= 255 zugelassen⓪#16. 1.87  (jm) TstScale, GADR11 aus Conditional-Clause gezogen⓪2(Fehler im Atari-Mode)⓪$2. 3.87  GetEA: SR->CCR⓪#27.02.87  Redefinition v. lokalen Labels möglich; Flag f. Labels, ob auf⓪-sie referiert wird; X-Option wird pro Mnemonic gesamt verwendet⓪#03.03.87  Ausklammerung aller 68020/881-Routinen f. Atari⓪#25.03.87  (jm) 68020-Korrekturen von CH (unbek. Datum) wieder eingebaut⓪#12.04.87  AsmWarning impl.; Warning bei ill. Zugriffen auf A3 bei Gepard⓪#20.04.87  Conditionals für 68020/881-Übersetzung (Asm20)⓪#28.04.87  Fehler in GetEA behoben (Asm-Symbols wurden mit .B geprüft)⓪#08.05.87  '* )' in AsmError und AsmWarning entfernt⓪#22.05.87  Wegen Fehler im Boot-ROM erfolgt bei MOVE from CCR eine⓪-Fehlermeldung.⓪#18.07.87  EAto0_5: d16(An) wird zu (An) optimiert, wenn d16 eine⓪-Nullkonst. ist.⓪#06.02.88  EAto0_5: d16(An) wird nur zu (An) optimiert, wenn d16 keine⓪-ausgeschriebene Null/Const⓪#01.01.89  (TT 18.08.88)  Neben pTxtLin wird auch TxtLine gerettet⓪#24.07.89  Bisher erkannte CalcExpr einige rel.-Adr-Überlaufe nicht:⓪0z.B. MOVE +/-x(PC,D0.W) oder MOVE +/-y(PC), wenn⓪0256>x>127, 65536>y>32767.⓪#10.12.89  Änderungen für separierten Compiler:⓪-BothSbl: as45, as46, as96 heissen SymAnd, SymOr, SymNot ⓪-LocalSearch statt MySrc⓪#13.12.89  Nachtrag aus TTs Version vom 31.08.89⓪0Symbol-Table: 2. 'DBRA' durch '@@DB' ersetzt, damit RTR geht.⓪#31.12.89  Den ConFact-Aufruf für die Parameter-Konsts durch 'ConstExpr'⓪-ersetzt⓪#29.01.90  Bei '-' Zeichen wird gleich ConstExpr aufgerufen, sodaß z.B.⓪-nicht mehr "-enumValue" geht (dann muß "0-..." progr. werden).⓪#11.02.90  JMP/JSR können auch auf Vars erfolgen⓪#11.03.90  BTST Dn,#x wird zugelassen⓪#16.06.90  MOVE from CCR zugelassen⓪#18.08.90  Anpassung des Offsets zum lok. Record-Baum⓪#10.10.90  Für 68881/2 wird nun auch "#" bei k-Faktor zugelassen (allerdings⓪-auch bei Bitfields)⓪#11.11.90  Symbol FP steht für das Frame-Ptr-Reg ("MM2Comp.VarReg")⓪#05.12.90  MOVEC SFC/DFC nun auch benutzbar⓪#--------------------------------------------------------------------------⓪ *)⓪ ⓪ (* Kommentierung:⓪#Bei Bezug auf MNEMONICs wird ihnen ein '%' direkt vorangestellt,⓪#z.B. '%RTE'. (TT)⓪#Procedurenamen mit '@' sind lokale Hilfsroutinen,die nur von den⓪#direkt folgenden Procedures benutzt werden sollen !⓪ *)⓪ ⓪ TYPE BITE = WORD;⓪ ⓪ CONST   NoOperands = 0;⓪(NoOperandsWZE = 1;⓪(DefltSiz   = 2; (* Nie aendern, weil dieser Wert sowieso festliegt *)⓪(LabelID    = $801D;⓪)⓪)AS1      =     14;⓪)AS2      =     26;⓪)AS3      =     2;⓪)AS4      =     3;⓪)AS5      =     5;  (* / *)⓪)AS6      =     4;⓪)AS7      =     23;⓪)AS8      =     24;⓪)AS9      =     47;⓪)(* !! alle Symbols rel. zu FirstAsmSbl bestimmen !! *)⓪)AS10     =     FirstAsmSbl; (* 93 *)⓪)AS17     =     100;⓪)AS18     =     101;⓪)AS25     =     108; (* D7 *)⓪)AS26     =     109; (* SP *)⓪)AS_FP    =     110; (* FP *)⓪)AS28     =     111;⓪)AS29     =     112;⓪)AS30     =     113;⓪)AS31     =     114;⓪)AS32     =     115;⓪)AS35     =     116;⓪)AS36     =     117;⓪)AS37     =     9;⓪)AS38     =     10;⓪)AS39     =     30;⓪)⓪)AS40     =     119; (* %ABCD *)⓪)AS_MneF  =     AS40;⓪)AS_MneL  =     240; (* %RTD  *)⓪)⓪)AS157    =     241; (* %DC   *)⓪)AS158    =     242; (* %DS   *)⓪)AS159    =     243; (* %@11  *)⓪)AS160    =     244; (* %EQU  *)⓪)AS161    =     245; (* %ACZ  *)⓪)AS162    =     246; (* %SYNC *)⓪)AS163    =     247; (* %ACS  *)⓪)AS164    =     248; (* %ACI  *)⓪)AS165    =     249; (* %BOMB *)⓪)⓪)(* neue Konstante seit 3.3a (68020) *)⓪)⓪)AS_Astrx =     4;   (* "*" *)⓪)AS_eKlA  =     15;⓪)AS_eKlZ  =     27;⓪)AS_gKlA  =     16;⓪)AS_gKlZ  =     28;⓪)AS_dPnkt =     25;⓪)⓪)AS_STR   =     250;⓪)AS_SFC   =     251;⓪)AS_DFC   =     252;⓪)AS_CACR  =     253;⓪)⓪)(* 254 und 255 müssen frei bleiben !!! (STRCONST und NUMCONST) *)⓪)⓪)AS_CAAR  =     257;⓪)AS_MSP   =     258;⓪)AS_ISP   =     259;⓪)AS_M20F  =     260;⓪)AS_M20L  =     AS_M20F + 36 (* 41 *) + 171 (* Anzahl der 68881-Mnes *);⓪)AS_FP0   =     AS_M20L + 1; (* 68881 - Register *)⓪)AS_FP7   =     AS_FP0 + 7;⓪)AS_FPCR  =     AS_FP7 + 1;⓪)AS_FPSR  =     AS_FPCR + 1;⓪)AS_FPIAR =     AS_FPSR + 1;⓪)⓪ VAR⓪ ⓪ MneSecCode : WORD;⓪ MneCode    : WORD;⓪ MneVec     : ADDRESS;⓪ DefltBcc   : BITE;⓪ SizeOfData : BITE;⓪ Args       : BITE;⓪ BreakAgain : BITE;⓪ (*$ ? RunGep:⓪ AsmOptions : LONG;⓪ pInstr     : LONG; *)⓪ (*$ ? RunST:⓪ AsmOptions : LONGWORD;⓪ pInstr     : LONGWORD; *)⓪ ⓪ ⓪ ModeSource:BITE;⓪ Mode2Source:BITE;⓪ RegSource:BITE;⓪ Reg2Source:BITE;⓪ DataTypeSource:WORD;⓪ DataTypeOdSource:WORD;⓪ IndRegSource:BITE;⓪ IndTypeSource:BITE;⓪ IndSizeSource:BITE;⓪ RegListSource:WORD;⓪ DataSource:ADDRESS;⓪ Data2Source:ADDRESS;⓪ IDPtrSource:ADDRESS;⓪ M20FlgSource:BITE;⓪ DataOdSource: (*$ ? RunGep: LONG *) (*$ ? RunST: LONGWORD *) ;⓪ IndScaleSource:BITE;⓪ FormatSource:BITE;⓪ BitWidthSource:BITE;⓪ BitOffsSource:BITE;⓪ ⓪ ModeDest:BITE;⓪ Mode2Dest:BITE;⓪ RegDest:BITE;⓪ Reg2Dest:BITE;⓪ DataTypeDest:WORD;⓪ DataTypeOdDest:WORD;⓪ IndRegDest:BITE;⓪ IndTypeDest:BITE;⓪ IndSizeDest:BITE;⓪ RegListDest:WORD;⓪ DataDest:ADDRESS;⓪ Data2Dest:ADDRESS;⓪ IDPtrDest:ADDRESS;⓪ M20FlgDest:BITE;⓪ DataOdDest: (*$ ? RunGep: LONG *) (*$ ? RunST: LONGWORD *) ;⓪ IndScaleDest:BITE;⓪ FormatDest:BITE;⓪ BitWidthDest:BITE;⓪ BitOffsDest:BITE;⓪ ⓪ ModeThird:BITE;⓪ Mode2Third:BITE;⓪ RegThird:BITE;⓪ Reg2Third:BITE;⓪ DataTypeThird:WORD;⓪ DataTypeOdThird:WORD;⓪ IndRegThird:BITE;⓪ IndTypeThird:BITE;⓪ IndSizeThird:BITE;⓪ RegListThird:WORD;⓪ DataThird:ADDRESS;⓪ Data2Third:ADDRESS;⓪ IDPtrThird:ADDRESS;⓪ M20FlgThird:BITE;⓪ DataOdThird: (*$ ? RunGep: LONG *) (*$ ? RunST: LONGWORD *) ;⓪ IndScaleThird:BITE;⓪ FormatThird:BITE;⓪ BitWidthThird:BITE;⓪ BitOffsThird:BITE;⓪ ⓪ ⓪ Mode:BITE;     (* Beschreibt Adr.-Art:⓪2Wert der Bits 0-5:⓪40  : keine Adressierung⓪41  : Dn⓪42  : An⓪43  : (An)⓪44  : (An)+⓪45  : -(An)⓪46  : d16(An)⓪47  : d8(An,Xn) / auch Erw. Adr.Arten bei 68020⓪48  : unbenutzt (war mal d16)⓪49  : d32⓪410 : d16(PC)⓪411 : d8(PC,Xn) / auch Erw. Adr.Arten bei 68020 mit PC⓪412 : #data⓪413 : SR⓪414 : USP⓪415 : CCR⓪416 : VBR⓪417 : (Dn)⓪418 : Xn - reglist⓪419 : SFC⓪420 : DFC⓪421 : CACR⓪422 : CAAR⓪423 : MSP⓪424 : ISP⓪4(* 68881 - Modi *)⓪425 : FPn⓪426 : FPn - reglist⓪427 : FPCR(reg=2), FPSR(reg=1), FPIAR(req=0)⓪428 : FStatus - reglist⓪429 : <ea>{Di}  (ea-Type in Mode2, i in Format)⓪430 : <ea>{#i}  (ea-Type in Mode2, i in Format)⓪4⓪2Bit 7 gesetzt: Doppelregister⓪2Bit 6 gesetzt: BitField folgt EA *)⓪ Mode2:BITE;    (* Adr.-Art f. zweites Register bei Doppelregs, sonst undef. *)⓪ Reg:BITE;      (* Registernummer *)⓪ Reg2:BITE;     (* evtl. zweite Registernummer bei 68020 (Doppelregister) *)⓪ DataType:WORD; (* bit 15 : 1=Wert noch unbekannt,⓪2bit 14 : ID = TYPE (z.B. TYPE einer RECORD-Def.),⓪2bit0-12: Type des Operanden:⓪40  : Short CONST (Byte/Word) : Konstante⓪41  : External Var.           : Konstante⓪42  : Num. Konstante          : Konstante⓪43  : einzelner Character     : Konstante⓪44  : Aufzählungstyp          : Konstante⓪45  : Record-Feld Variable    : Konstante⓪46  : glob. Var., Table       : abs. Pointer⓪47  : glob. Procedure         : abs. Pointer⓪48  : lok. Label              : rel. Pointer⓪49  : lok. Var.               : Konstante⓪410 : lok. Procedure          : rel. Pointer⓪411 : Long CONST              : Konstante⓪412 : Real CONST              : Konstante *)⓪ DataTypeOd:WORD; (* wie oben, für od *)⓪ IndReg:BITE;   (* Indexregister Nummer *)⓪ IndType:BITE;  (* Indexregister Type ($FF=Dn/0=An) *)⓪ IndSize:BITE;  (* Indexregister Size (.W/.L) *)⓪ RegList:WORD;  (* fuer MOVEM *)⓪ Data: (*$ ? RunGep: LONG *) (*$ ? RunST: LONGWORD *) ;⓪"(* evtl. Konstante (z.B. d32 oder bd) *)⓪ Data2: (*$ ? RunGep: LONG *) (*$ ? RunST: LONGWORD *) ;⓪"(* weitere 32 für die Abspeicherrung einer Real Const *)⓪ IDPtr:ADDRESS; (* bei glob. ID-Referenzen: Zeiger auf ID *)⓪ M20Flg:BITE;   (* Flags f. erw. Adr.-Art d. 68020 (s. CONST unten) *)⓪ DataOd: (*$ ? RunGep: LONG *) (*$ ? RunST: LONGWORD *) ;   (* od bei 68020 *)⓪ IndScale:BITE; (* Scaling-Faktor bei 68020 *)⓪ Format:BITE;   (* Format der Packedconversion des 68881 *)⓪ BitWidth:BITE; (* Breite bei Bitfields (bit 5 zeigt Register-Indizierung an) *)⓪ BitOffs:BITE;  (* Offset bei Bitfields (bit 5 zeigt Register-Indizierung an) *)⓪ GetLastSbl: BOOLEAN;⓪ ⓪ ⓪ CONST FlgeKlA = 0;⓪&FlgeKlZ = 1;⓪&FlgXn   = 2;⓪&FlgAnPC = 3;⓪&FlgOd   = 4;⓪&FlgBd   = 5;⓪&FlgPreIx= 6;⓪&FlgIs20 = 7; (* markiert Erw. Adr-Art der 68020 '([bd,An/PC],Xn],od)' *)⓪ ⓪ ⓪ PROCEDURE ASMSBL;⓪ BEGIN⓪ ASSEMBLER⓪)ACZ     'A0'⓪)ACZ     'A1'⓪)ACZ     'A2'⓪)ACZ     'A3'⓪)ACZ     'A4'⓪)ACZ     'A5'⓪)ACZ     'A6'⓪)ACZ     'A7'⓪)ACZ     'D0'⓪)ACZ     'D1'⓪)ACZ     'D2'⓪)ACZ     'D3'⓪)ACZ     'D4'⓪)ACZ     'D5'⓪)ACZ     'D6'⓪)ACZ     'D7'⓪)ACZ     'SP'⓪)ACZ     'FP'⓪)ACZ     '@2'⓪)ACZ     'SR'⓪)ACZ     'USP'⓪)ACZ     'CCR'⓪)ACZ     'VBR'⓪)ACZ     'PC'⓪)ACZ     '@3'⓪)ACZ     '@4'⓪)ACZ     'ABCD'⓪)ACZ     'SBCD'⓪)ACZ     'ADDX'⓪)ACZ     'SUBX'⓪)ACZ     'ADD'⓪)ACZ     '@5'⓪)ACZ     '@6'⓪)ACZ     'SUB'⓪)ACZ     'ADDA'⓪)ACZ     'CMPA'⓪)ACZ     'SUBA'⓪)ACZ     'MOVEA'⓪)ACZ     'ADDI'⓪)ACZ     'CMPI'⓪)ACZ     'SUBI'⓪)ACZ     'ANDI'⓪)ACZ     'EORI'⓪)ACZ     'ORI'⓪)ACZ     'ADDQ'⓪)ACZ     'SUBQ'⓪)ACZ     'ASL'⓪)ACZ     'ASR'⓪)ACZ     'LSL'⓪)ACZ     'LSR'⓪)ACZ     'ROL'⓪)ACZ     'ROR'⓪)ACZ     'ROXL'⓪)ACZ     'ROXR'⓪)ACZ     'BCC'⓪)ACZ     'BCS'⓪)ACZ     'BEQ'⓪)ACZ     'BGE'⓪)ACZ     'BGT'⓪)ACZ     'BHI'⓪)ACZ     'BLE'⓪)ACZ     'BLS'⓪)ACZ     'BLT'⓪)ACZ     'BMI'⓪)ACZ     'BNE'⓪)ACZ     'BPL'⓪)ACZ     'BVC'⓪)ACZ     'BVS'⓪)ACZ     'BRA'⓪)ACZ     'BSR'⓪)ACZ     'BCHG'⓪)ACZ     'BCLR'⓪)ACZ     'BSET'⓪)ACZ     'BTST'⓪)ACZ     'CHK'⓪)ACZ     'MULS'⓪)ACZ     'MULU'⓪)ACZ     'DIVS'⓪)ACZ     'DIVU'⓪)ACZ     'CLR'⓪)ACZ     'NEG'⓪)ACZ     'NEGX'⓪)ACZ     '@7'⓪)ACZ     'TST'⓪)ACZ     'CMP'⓪)ACZ     'CMPM'⓪)ACZ     'DBCC'⓪)ACZ     'DBCS'⓪)ACZ     'DBEQ'⓪)ACZ     'DBF'⓪)ACZ     'DBRA'⓪)ACZ     'DBGE'⓪)ACZ     'DBGT'⓪)ACZ     'DBHI'⓪)ACZ     'DBLE'⓪)ACZ     'DBLS'⓪)ACZ     'DBLT'⓪)ACZ     'DBMI'⓪)ACZ     'DBNE'⓪)ACZ     'DBPL'⓪)ACZ     'DBT'⓪)ACZ     'DBVC'⓪)ACZ     'DBVS'⓪)ACZ     'EOR'⓪)ACZ     'EXG'⓪)ACZ     'EXT'⓪)ACZ     'JMP'⓪)ACZ     'JSR'⓪)ACZ     'PEA'⓪)ACZ     'LEA'⓪)ACZ     'LINK'⓪)ACZ     'MOVE'⓪)ACZ     'MOVEM'⓪)ACZ     'MOVEP'⓪)ACZ     'MOVEQ'⓪)ACZ     'NBCD'⓪)ACZ     'SCC'⓪)ACZ     'SCS'⓪)ACZ     'SEQ'⓪)ACZ     'SF'⓪)ACZ     'SGE'⓪)ACZ     'SGT'⓪)ACZ     'SHI'⓪)ACZ     'SLE'⓪)ACZ     'SLS'⓪)ACZ     'SLT'⓪)ACZ     'SMI'⓪)ACZ     'SNE'⓪)ACZ     'SPL'⓪)ACZ     'ST'⓪)ACZ     'SVC'⓪)ACZ     'SVS'⓪)ACZ     'TAS'⓪)ACZ     'NOP'⓪)ACZ     'RTE'⓪)ACZ     'RTS'⓪)ACZ     'TRAPV'⓪)ACZ     'RESET'⓪)ACZ     'STOP'⓪)ACZ     'SWAP'⓪)ACZ     'TRAP'⓪)ACZ     'UNLK'⓪)ACZ     'RTR'⓪)ACZ     '@@DB'⓪)ACZ     'ILLEGAL'⓪)ACZ     'BREAK'⓪)ACZ     'MOVEC'⓪)ACZ     'RTD'⓪)ACZ     'DC'⓪)ACZ     'DS'⓪)ACZ     '@11'⓪)ACZ     'EQU'⓪)ACZ     'ACZ'⓪)ACZ     'SYNC'⓪)ACZ     'ASC'⓪)ACZ     'ACI'⓪)ACZ     'BOMB'⓪)⓪); neue Symbole seit 30.7.86 (3.3a) f. 68020-Assembler⓪)ACZ     'STR'⓪ (*$ ? Asm20:⓪)ACZ     'SFC'⓪)ACZ     'DFC'⓪)ACZ     'CACR'⓪)ACZ     '@01'          (* NUMCONST *)⓪)ACZ     '@02'          (* STRCONST *)⓪)ACZ     '@03'          (*  *)⓪)ACZ     'CAAR'⓪)ACZ     'MSP'⓪)ACZ     'ISP'⓪)ACZ     'BFCHG'⓪)ACZ     'BFCLR'⓪)ACZ     'BFEXTS'⓪)ACZ     'BFEXTU'⓪)ACZ     'BFFFO'⓪)ACZ     'BFINS'⓪)ACZ     'BFSET'⓪)ACZ     'BFTST'⓪)ACZ     'BKPT'⓪)ACZ     'CALLM'⓪)ACZ     'CAS'⓪)ACZ     'CAS2'⓪)ACZ     'CHK2'⓪)ACZ     'CMP2'⓪)ACZ     'DIVSL'⓪)ACZ     'DIVUL'⓪)ACZ     'EXTB'⓪)ACZ     'MOVES'⓪)ACZ     'PACK'⓪)ACZ     'RTM'⓪)ACZ     'TRAPCC'⓪)ACZ     'TRAPCS'⓪)ACZ     'TRAPEQ'⓪)ACZ     'TRAPF'⓪)ACZ     'TRAPGE'⓪)ACZ     'TRAPGT'⓪)ACZ     'TRAPHI'⓪)ACZ     'TRAPLE'⓪)ACZ     'TRAPLS'⓪)ACZ     'TRAPLT'⓪)ACZ     'TRAPMI'⓪)ACZ     'TRAPNE'⓪)ACZ     'TRAPPL'⓪)ACZ     'TRAPT'⓪)ACZ     'TRAPVC'⓪)ACZ     'TRAPVS'⓪)ACZ     'UNPK'⓪)⓪); Mnemonics 68881⓪)⓪)ACZ     'FMOVE'               ; Umspeichern⓪)ACZ     'FMOVECR'⓪)ACZ     'FMOVEM'⓪)ACZ     'FRESTORE'⓪)ACZ     'FSAVE'⓪)ACZ     'FNOP'⓪)ACZ     'FTST'⓪)ACZ     'FBEQ'                ; Controls⓪)ACZ     'FBF'⓪)ACZ     'FBGE'⓪)ACZ     'FBGL'⓪)ACZ     'FBGLE'⓪)ACZ     'FBGT'⓪)ACZ     'FBLE'⓪)ACZ     'FBLT'⓪)ACZ     'FBNE'⓪)ACZ     'FBNGE'⓪)ACZ     'FBNGL'⓪)ACZ     'FBNGLE'⓪)ACZ     'FBNGT'⓪)ACZ     'FBNLE'⓪)ACZ     'FBNLT'⓪)ACZ     'FBSEQ'⓪)ACZ     'FBSF'⓪)ACZ     'FBSNE'⓪)ACZ     'FBST'⓪)ACZ     'FBOGE'⓪)ACZ     'FBOGL'⓪)ACZ     'FBOGT'⓪)ACZ     'FBOLE'⓪)ACZ     'FBOLT'⓪)ACZ     'FBOR'⓪)ACZ     'FBT'⓪)ACZ     'FBUGE'⓪)ACZ     'FBUEQ'⓪)ACZ     'FBUN'⓪)ACZ     'FBUGT'⓪)ACZ     'FBULE'⓪)ACZ     'FBULT'⓪)ACZ     'FDBEQ'⓪)ACZ     'FDBF'⓪)ACZ     'FDBGE'⓪)ACZ     'FDBGL'⓪)ACZ     'FDBGLE'⓪)ACZ     'FDBGT'⓪)ACZ     'FDBLE'⓪)ACZ     'FDBLT'⓪)ACZ     'FDBNE'⓪)ACZ     'FDBNGE'⓪)ACZ     'FDBNGL'⓪)ACZ     'FDBNGLE'⓪)ACZ     'FDBNGT'⓪)ACZ     'FDBNLE'⓪)ACZ     'FDBNLT'⓪)ACZ     'FDBSEQ'⓪)ACZ     'FDBSF'⓪)ACZ     'FDBSNE'⓪)ACZ     'FDBST'⓪)ACZ     'FDBOGE'⓪)ACZ     'FDBOGL'⓪)ACZ     'FDBOGT'⓪)ACZ     'FDBOLE'⓪)ACZ     'FDBOLT'⓪)ACZ     'FDBOR'⓪)ACZ     'FDBT'⓪)ACZ     'FDBUGE'⓪)ACZ     'FDBUEQ'⓪)ACZ     'FDBUN'⓪)ACZ     'FDBUGT'⓪)ACZ     'FDBULE'⓪)ACZ     'FDBULT'⓪)ACZ     'FSEQ'⓪)ACZ     'FSF'⓪)ACZ     'FSGE'⓪)ACZ     'FSGL'⓪)ACZ     'FSGLE'⓪)ACZ     'FSGT'⓪)ACZ     'FSLE'⓪)ACZ     'FSLT'⓪)ACZ     'FSNE'⓪)ACZ     'FSNGE'⓪)ACZ     'FSNGL'⓪)ACZ     'FSNGLE'⓪)ACZ     'FSNGT'⓪)ACZ     'FSNLE'⓪)ACZ     'FSNLT'⓪)ACZ     'FSSEQ'⓪)ACZ     'FSSF'⓪)ACZ     'FSSNE'⓪)ACZ     'FSST'⓪)ACZ     'FSOGE'⓪)ACZ     'FSOGL'⓪)ACZ     'FSOGT'⓪)ACZ     'FSOLE'⓪)ACZ     'FSOLT'⓪)ACZ     'FSOR'⓪)ACZ     'FST'⓪)ACZ     'FSUGE'⓪)ACZ     'FSUEQ'⓪)ACZ     'FSUN'⓪)ACZ     'FSUGT'⓪)ACZ     'FSULE'⓪)ACZ     'FSULT'⓪)ACZ     'FTRAPEQ'⓪)ACZ     'FTRAPF'⓪)ACZ     'FTRAPGE'⓪)ACZ     'FTRAPGL'⓪)ACZ     'FTRAPGLE'⓪)ACZ     'FTRAPGT'⓪)ACZ     'FTRAPLE'⓪)ACZ     'FTRAPLT'⓪)ACZ     'FTRAPNE'⓪)ACZ     'FTRAPNGE'⓪)ACZ     'FTRAPNGL'⓪)ACZ     'FTRAPNGLE'⓪)ACZ     'FTRAPNGT'⓪)ACZ     'FTRAPNLE'⓪)ACZ     'FTRAPNLT'⓪)ACZ     'FTRAPSEQ'⓪)ACZ     'FTRAPSF'⓪)ACZ     'FTRAPSNE'⓪)ACZ     'FTRAPST'⓪)ACZ     'FTRAPOGE'⓪)ACZ     'FTRAPOGL'⓪)ACZ     'FTRAPOGT'⓪)ACZ     'FTRAPOLE'⓪)ACZ     'FTRAPOLT'⓪)ACZ     'FTRAPOR'⓪)ACZ     'FTRAPT'⓪)ACZ     'FTRAPUGE'⓪)ACZ     'FTRAPUEQ'⓪)ACZ     'FTRAPUN'⓪)ACZ     'FTRAPUGT'⓪)ACZ     'FTRAPULE'⓪)ACZ     'FTRAPULT'⓪)ACZ     'FADD'                ; Dyadic Operations⓪)ACZ     'FCMP'⓪)ACZ     'FDIV'⓪)ACZ     'FMOD'⓪)ACZ     'FMUL'⓪)ACZ     'FREM'⓪)ACZ     'FSCALE'⓪)ACZ     'FSGLDIV'⓪)ACZ     'FSGLMUL'⓪)ACZ     'FSUB'⓪)ACZ     'FABS'                ; Monidic Operations⓪)ACZ     'FACOS'⓪)ACZ     'FASIN'⓪)ACZ     'FATAN'⓪)ACZ     'FATANH'⓪)ACZ     'FCOS'⓪)ACZ     'FCOSH'⓪)ACZ     'FETOX'⓪)ACZ     'FETOXM1'⓪)ACZ     'FGETEXP'⓪)ACZ     'FGETMAN'⓪)ACZ     'FINT'⓪)ACZ     'FINTRZ'⓪)ACZ     'FLOGN'⓪)ACZ     'FLOGNP1'⓪)ACZ     'FLOG10'⓪)ACZ     'FLOG2'⓪)ACZ     'FNEG'⓪)ACZ     'FSIN'⓪)ACZ     'FSINH'⓪)ACZ     'FSQRT'⓪)ACZ     'FTAN'⓪)ACZ     'FTANH'⓪)ACZ     'FTENTOX'⓪)ACZ     'FTWOTOX'⓪)ACZ     'FSINCOS'             ; Dual Monadic Operation⓪)⓪)ACZ     'FP0'                 ; 68881 Register⓪)ACZ     'FP1'⓪)ACZ     'FP2'⓪)ACZ     'FP3'⓪)ACZ     'FP4'⓪)ACZ     'FP5'⓪)ACZ     'FP6'⓪)ACZ     'FP7'⓪)ACZ     'FPCR'⓪)ACZ     'FPSR'⓪)ACZ     'FPIAR'⓪)⓪)*)⓪)⓪)DC.B    0⓪)SYNC⓪ END⓪ END ASMSBL;⓪ ⓪ ⓪ PROCEDURE BOTHSBL;⓪ BEGIN⓪ ASSEMBLER⓪)DC.W    SymAnd⓪)ACZ     'AND'⓪)SYNC⓪)DC.W    SymNot⓪)ACZ     'NOT'⓪)SYNC⓪)DC.W    SymOr⓪)ACZ     'OR'⓪)DC.B    0⓪)SYNC⓪)DC.W    0⓪ END⓪ END BOTHSBL;⓪ ⓪ ⓪ (*⓪"901: Wrong addressing mode⓪"992: Illegal operand size⓪"903: Branch too long⓪"904: Illegal symbol⓪"905: Label expected⓪"906: Unknown label⓪"907: Number expected⓪"909: Odd address⓪"910: Modula keyword not allowed here⓪"911: Short branch not allowed here⓪"912: Label declared twice⓪"913: Logical addressing error⓪"914: Illegal Expression⓪"915: Warning: use only JMP to BOOT-ROM RTE-emulation !⓪"916: Operand out of Range⓪"917: 68020 mnemonic not allowed⓪"918: String too long⓪"919: unknown instruction⓪"920: Unsinnige Adr.-Art '([]...)'⓪"921: 68020 Adr-nicht erlaubt⓪"922: Use "MOVE fom SR" instruction instead⓪"950: (Warning:) Illegal addressing mode⓪ *)⓪ ⓪ CONST asmIllAM = 950;⓪ ⓪ PROCEDURE AERR1;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #901,D5⓪"JMP     SyntaxErr⓪ END⓪ END AERR1;⓪ ⓪ ⓪ PROCEDURE AERR2;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #902,D5⓪"JMP     SyntaxErr⓪ END⓪ END AERR2;⓪ ⓪ ⓪ PROCEDURE AERR3;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #903,D5⓪"JMP     SyntaxErr⓪ END⓪ END AERR3;⓪ ⓪ ⓪ PROCEDURE AERR4;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #904,D5⓪"JMP     SyntaxErr⓪ END⓪ END AERR4;⓪ ⓪ ⓪ PROCEDURE AERR5;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #905,D5⓪"JMP     SyntaxErr⓪ END⓪ END AERR5;⓪ ⓪ ⓪ PROCEDURE AERR6;⓪ BEGIN⓪ ASSEMBLER⓪"JSR     IDfromTree⓪"MOVE.W  #906,D5⓪"JMP     SyntaxErr⓪ END⓪ END AERR6;⓪ ⓪ ⓪ PROCEDURE AERR7;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #907,D5⓪"JMP     SyntaxErr⓪ END⓪ END AERR7;⓪ ⓪ ⓪ (* AERR8 gibts nicht mehr ! *)⓪ ⓪ ⓪ PROCEDURE AERR9;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #909,D5⓪"JMP     SyntaxErr⓪ END⓪ END AERR9;⓪ ⓪ ⓪ PROCEDURE AERR10;⓪ BEGIN⓪ ASSEMBLER⓪#MOVE.W  #910,D5⓪#JMP     SyntaxErr⓪ END⓪ END AERR10;⓪ ⓪ ⓪ PROCEDURE AERR11;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #911,D5⓪"JMP     SyntaxErr⓪ END⓪ END AERR11;⓪ ⓪ ⓪ PROCEDURE AERR12;⓪ BEGIN⓪ ASSEMBLER⓪#MOVE.W  #912,D5⓪#JMP     SyntaxErr⓪ END⓪ END AERR12;⓪ ⓪ ⓪ PROCEDURE AERR13;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #913,D5       ; 'Logical Addressing Error'⓪"JMP     SyntaxErr⓪ END⓪ END AERR13;⓪ ⓪ ⓪ PROCEDURE AERR14;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #914,D5       ; 'Illegal Expression'⓪"JMP     SyntaxErr⓪ END⓪ END AERR14;⓪ ⓪ PROCEDURE AERR15;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #915,D5       ;'Warning: Use 'JMP $40C' '⓪"JMP     SyntaxErr⓪ END⓪ END AERR15;⓪ ⓪ PROCEDURE AERR16;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #916,D5       ;'Operand out of Size' '⓪"JMP     SyntaxErr⓪ END⓪ END AERR16;⓪ ⓪ PROCEDURE AERR17;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #917,D5       ; '68020 mnemonic not allowed'⓪"JMP     SyntaxErr⓪ END⓪ END AERR17;⓪ ⓪ PROCEDURE AERR18;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #918,D5       ; 'String too long'⓪"JMP     SyntaxErr⓪ END⓪ END AERR18;⓪ ⓪ PROCEDURE AERR19;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #919,D5       ; 'unknown instruction⓪"JMP     SyntaxErr⓪ END⓪ END AERR19;⓪ ⓪ PROCEDURE AERR20;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #920,D5       ; Unsinnige Adr.-Art '([]...)'⓪"JMP     SyntaxErr⓪ END⓪ END AERR20;⓪ ⓪ PROCEDURE AERR21;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #921,D5       ; 68020 Adr-nicht erlaubt⓪"JMP     SyntaxErr⓪ END⓪ END AERR21;⓪ ⓪ PROCEDURE AERR22;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #922,D5       ; Use "MOVE fom SR" instruction instead⓪"JMP     SyntaxErr⓪ END⓪ END AERR22;⓪ ⓪ PROCEDURE AERR23;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #923,D5       ; Function returns D0 - use '/'⓪"JMP     SyntaxErr⓪ END⓪ END AERR23;⓪ ⓪ PROCEDURE AERR24;⓪ BEGIN⓪ ASSEMBLER⓪"MOVE.W  #924,D5       ; No Asm in WITH⓪"JMP     SyntaxErr⓪ END⓪ END AERR24;⓪ ⓪ ⓪ (*$ ? Gepard:⓪ PROCEDURE AsmWarning;⓪"BEGIN⓪$ASSEMBLER⓪); D2 enth. Fehlernummer, D3 die Position (0=Mnem., 1/2/3=Operand⓪)MOVEM.L D0-A6,-(A7)⓪)MOVE.L  AsmOptions,D4⓪)BTST    #23,D4         ; $W- ?⓪)BEQ     noWarn⓪)SUBQ    #1,D3⓪)BCS     mne⓪)BEQ     op1⓪)SUBQ    #1,D3⓪)BEQ     op2⓪)MOVE.L  pTxtOp3,A2     ; Text-^ für Operand 3⓪)BRA     warn⓪ op2      MOVE.L  pTxtOp2,A2     ; Text-^ für Operand 2⓪)BRA     warn⓪ op1      MOVE.L  pTxtOp1,A2     ; Text-^ für Operand 1⓪)BRA     warn⓪ mne      MOVE.L  pTxtMne,A2     ; Text-^ für Mnemonic⓪ warn     MOVE    D2,D5⓪)MOVE.L  pLastSym,-(A7)⓪)MOVE.L  pTxtLin,-(A7)⓪)MOVE.L  A2,pLastSym⓪)MOVE.L  pTxtLin2,pTxtLin⓪)JSR     Warning⓪)MOVE.L  (A7)+,pTxtLin⓪)MOVE.L  (A7)+,pLastSym⓪ noWarn   MOVEM.L (A7)+,D0-A6⓪$END⓪"END AsmWarning;⓪ *)⓪ ⓪ ⓪ PROCEDURE AsmSameSbl;⓪"BEGIN⓪$ASSEMBLER⓪(CLR     GetLastSbl⓪(JSR     SameSbl⓪(MOVE.L  LastGSD2,D2⓪(TST.W   D3⓪$END⓪"END AsmSameSbl;⓪ ⓪ PROCEDURE AsmGetSbl;⓪"BEGIN⓪$ASSEMBLER⓪(TST     GetLastSbl⓪(BNE     last⓪(JMP     GetSbl⓪&last⓪(JMP     AsmSameSbl⓪$END⓪"END AsmGetSbl;⓪ ⓪ ⓪ ⓪ PROCEDURE CopyLast;⓪"BEGIN⓪"ASSEMBLER⓪-MOVE.L  D0,-(A7)⓪-MOVE.L  #ModeDest,D0⓪-SUB.L   #ModeSource,D0⓪-SUBQ.L  #1,D0⓪"L1         MOVE.B  (A0)+,(A1)+⓪-DBRA    D0,L1⓪-MOVE.L  (A7)+,D0⓪-MOVEA.L (A7)+,A1⓪"END⓪"END CopyLast;⓪ ⓪ PROCEDURE SourceToLast;⓪"BEGIN⓪"ASSEMBLER⓪-MOVE.L  A1,-(A7)⓪-LEA     ModeSource,A0⓪-LEA     Mode,A1⓪-JMP     CopyLast⓪"END⓪"END SourceToLast;⓪#⓪ PROCEDURE DestToLast;⓪"BEGIN⓪"ASSEMBLER⓪-MOVE.L  A1,-(A7)⓪-LEA     ModeDest,A0⓪-LEA     Mode,A1⓪-JMP     CopyLast⓪"END⓪"END DestToLast;⓪ ⓪ PROCEDURE ThirdToLast;⓪"BEGIN⓪"ASSEMBLER⓪-MOVE.L  A1,-(A7)⓪-LEA     ModeThird,A0⓪-LEA     Mode,A1⓪-JMP     CopyLast⓪"END⓪"END ThirdToLast;⓪ ⓪ PROCEDURE LastToThird;⓪"BEGIN⓪"ASSEMBLER⓪-MOVE.L  A1,-(A7)⓪-LEA     Mode,A0⓪-LEA     ModeThird,A1⓪-JMP     CopyLast⓪"END⓪"END LastToThird;⓪ ⓪ PROCEDURE LastToDest;⓪"BEGIN⓪"ASSEMBLER⓪-MOVE.L  A1,-(A7)⓪-LEA     Mode,A0⓪-LEA     ModeDest,A1⓪-JMP     CopyLast⓪"END⓪"END LastToDest;⓪ ⓪ PROCEDURE LastToSource;⓪"BEGIN⓪"ASSEMBLER⓪-MOVE.L  A1,-(A7)⓪-LEA     Mode,A0⓪-LEA     ModeSource,A1⓪-JMP     CopyLast⓪"END⓪"END LastToSource;⓪ ⓪ ⓪ PROCEDURE GetSize;⓪"BEGIN⓪"ASSEMBLER⓪+MOVE.W  D3,-(A7)⓪+CMPI.B  #'.',(A2)⓪+BNE     SizeE          ; -> keine Sizeangabe⓪+⓪+ADDQ.L  #1,A2⓪+MOVE.B  (A2)+,D3⓪+ANDI.B  #$5F,D3        ;aus KLEIN mach gross...⓪+⓪+MOVEQ   #$01,D0⓪+CMPI.B  #'B',D3⓪+BEQ     SizeE⓪+⓪+MOVEQ   #$02,D0⓪+CMPI.B  #'W',D3⓪+BEQ     SizeE⓪+⓪+MOVEQ   #$04,D0⓪+CMPI.B  #'L',D3⓪+BEQ     SizeE⓪+⓪+MOVEQ   #$08,D0⓪+CMPI.B  #'S',D3⓪+BEQ     SizeE⓪"⓪+MOVEQ   #$10,D0⓪+CMPI.B  #'D',D3⓪+BEQ     SizeE⓪"⓪+MOVEQ   #$20,D0⓪+CMPI.B  #'X',D3⓪+BEQ     SizeE⓪"⓪+MOVEQ   #$40,D0⓪+CMPI.B  #'P',D3⓪+BEQ     SizeE⓪"⓪+JMP     AERR1⓪"⓪"SizeE    MOVE.W  (A7)+,D3⓪+MOVE.B  D0,SizeOfData⓪"END⓪"END GetSize;⓪ ⓪ ⓪ PROCEDURE NewLabel;⓪"BEGIN⓪"ASSEMBLER  JSR     GETID0         ;Labelnamen in ID-Baum eintragen⓪+JSR     PULLID⓪+JSR     SETID⓪+MOVE.W  #LabelID,-2(A1,D6.L) ;Type festlegen⓪+CLR.L   -6(A1,D6.L)⓪+CLR.L   -10(A1,D6.L)⓪+CLR.L   -14(A1,D6.L)⓪+CLR.W   -16(A1,D6.L) ; BOOLEAN, f. Flag, ob auf Label referiert wird⓪+MOVE.L  D6,D2⓪+SUBI.L  #16,D6⓪+MOVE.L  D6,TRESPC⓪"END⓪"END NewLabel;⓪ ⓪ PROCEDURE SaveIDPtr; (* RETTET ^ x(A1,D2.L) NACH IDPtr *)⓪ BEGIN⓪"ASSEMBLER⓪$MOVEA.L A1,A0⓪$ADDA.L  D2,A0⓪$ADDA.L  D3,A0⓪$MOVE.L  A0,IDPtr⓪$BSET    #7,DataType⓪"END⓪ END SaveIDPtr;⓪ ⓪ ⓪ (*⓪!* Aufruf bei einem Proc-Call. Wenn Proc Result in D0 liefert, muß⓪!* nach dem Proc-Namen das Zeichen "/" folgen!⓪!*)⓪ PROCEDURE CheckProcResult;⓪"BEGIN⓪$ASSEMBLER⓪(MOVE.L  D2,-(A7)⓪(JSR     AsmSameSbl⓪(BTST    #8,D3⓪(BEQ     ok⓪(JSR     AsmGetSbl⓪(CMPI    #AS5,D3         ; '/'⓪(BEQ     ok⓪(JMP     AERR23⓪%ok MOVE.L  (A7)+,D2⓪$END⓪"END CheckProcResult;⓪ ⓪ (*⓪!*   DATA HOLEN⓪!*)⓪ VAR SUBNEXT:BITE (* Flag *) ;⓪$SaveA2, SaveD2: (*$ ? RunGep: LONG *) (*$ ? RunST: LONGWORD *) ;⓪$SaveD3:WORD;⓪ PROCEDURE GetExpr;⓪ BEGIN⓪ ASSEMBLER⓪)SF      SUBNEXT⓪)CLR.W   DataType⓪)CLR.L   Data⓪)⓪)MOVE.L  OPTIONS,D0⓪)LSR     #1,D0          ;Soll BREAK erfolgen ?⓪)BCC     noBrk          ;nein⓪)BREAK⓪)⓪ noBrk    JSR     AsmSameSbl⓪)CMPI.W  #AS3,D3      ; '+'⓪)BEQ.W   NUMDAT⓪)CMP     #AS4,D3      ; '-'?⓪)BEQ.W   NUMDAT⓪)BRA.W   DATAL⓪)(*⓪)BNE.L   DATAL⓪)ST      SUBNEXT⓪ DATAPL2  JSR     AsmGetSbl⓪)BRA.L   DATAL⓪)*)⓪)⓪ AER1     JMP     AERR1⓪ AER4     JMP     AERR4⓪ AER14    JMP     AERR14 ;'ILLEGAL EXPRESSION'⓪)⓪ RecFeld  ; ermittele Record-Feld⓪)MOVE.L  SaveD2,D2⓪)MOVE.W  -2(A1,D2.L),D3  ;Hole ID-Typ⓪)MOVE.W  D3,SaveD3⓪)ANDI.W  #$80FF,D3⓪)CMPI.W  #$800E,D3       ; ID = RECORD-FELD ?⓪)BEQ     RecF3⓪)CMPI.W  #$8011,D3       ; ID = VARIABLE ?⓪)BNE     RecF2           ;Nein: direkt auf Typ testen⓪ RecF3    MOVE.L  -10(A1,D2.L),D2 ;Hole Typ-^ nach D2⓪)MOVE.W  -2(A1,D2.L),D3  ;Hole Typ⓪)ANDI.W  #$80FF,D3⓪ RecF2    CMPI.W  #$800D,D3       ;Typ = Record ?⓪)BEQ     RecF4⓪)⓪)CLR.L   Data            ;alten Wert loeschen, weil er nicht⓪A;aufaddiert werden darf !⓪)CMPI.W  #$800C,D3       ;Typ = Array ?⓪)BEQ     RecF3⓪)CMPI.W  #$8014,D3       ;Typ = Pointer ?⓪)BEQ     RecF3⓪)⓪)JMP     AERR4           ;Nein:ERROR⓪)⓪ RecF4    ; Verarbeite Record⓪)MOVE.L  -14(A1,D2.L),D2 ;Hole loc.Rec-Tree-^ nach D2⓪)MOVE.B  (A2),D1⓪)JSR     LocalSearch     ;suche ID in Rec.Tree⓪)BCS     AER4            ;ERROR:Record-Feld nicht gefunden⓪)MOVE.L  -6(A1,D2.L),D0  ;hole rel.Adr des Rec-Feldes⓪)MOVE.W  SaveD3,D3⓪)ANDI.W  #$0200,D3⓪)BEQ     LocRec          ;Lokale Rec-Var:Feld-Offset aufaddieren⓪)⓪)MOVE.W  DataType,D3⓪)BTST    #6,D3           ;Typenkennung f. glob Var testen⓪)BEQ     LocRec          ;ist schon geloescht -> (schon 2.Rec-Feld)⓪)CLR.L   Data            ;sonst:Glob.Adr loeschen⓪)⓪ LocRec   CLR.W   DataType        ;Typenkennung f. lok. Var loeschen⓪)MOVEQ   #5,D3⓪)BRA.L   DATAFI          ;-> Rel.Adr.des Feldes zu DATA addieren⓪)⓪)⓪ !DATAL   JSR     AsmSameSbl⓪)ANDI.W  #$90FF,D3⓪)CMPI.W  #$9011,D3       ;EXTERNAL VARIABLE ?⓪)BNE     NEVARREF⓪)⓪+MOVE.L  -6(A1,D2.L),D0⓪+MOVEQ   #1,D3⓪+BRA.L   DATAFI⓪ ⓪ NEVARREF JSR     AsmSameSbl⓪)ANDI.W  #$82FF,D3⓪)CMPI.W  #$8211,D3         ;GLOBALE VARIABLE ?⓪)BNE     NGVARREF⓪)⓪+MOVEQ   #-14,D3⓪+JSR     SaveIDPtr⓪+MOVEQ   #6,D3⓪+BRA.L   DATAFI⓪ ⓪ NGVARREF CMPI.W  #$8011,D3         ;LOKALE VARIABLE ?⓪)BNE     NOVARREF⓪+⓪+TST     WithScope⓪+BEQ     noWith⓪+JMP     AERR24⓪)noWith⓪+⓪+MOVE.L  -6(A1,D2.L),D0⓪+MOVEQ   #9,D3⓪+BRA.L   DATAFI⓪ ⓪ NOVARREF CMPI.W  #$8206,D3         ;GLOBALE PROCEDURE?⓪)BNE     NOPRCD⓪ ⓪+JSR     CheckProcResult⓪+MOVEQ   #-18,D3⓪+JSR     SaveIDPtr⓪+MOVEQ   #7,D3⓪+BRA.L   DATAFI⓪ ⓪ NOPRCD   CMPI.W  #$8006,D3         ;LOKALE PROCEDURE?⓪)BNE     NOLPRCD⓪)⓪+TST     WithScope⓪+BEQ     noWith2⓪+JMP     AERR24⓪)noWith2⓪)⓪+JSR     CheckProcResult⓪+MOVE.L  -6(A1,D2.L),D0  ;Ist Adr. der Proc. schon bekannt ?⓪+BEQ     LPRC0           ;Nein->Ref.^ merken.⓪+⓪+; lok. Proc. mit bekannter Adr.⓪+MOVEQ   #10,D3⓪+BRA.L   DATAFI⓪+⓪"LPRC0    ; lok. Proc. mit unbekannter Adr. / Vorw. Ref.⓪+MOVEQ   #-18,D3⓪+JSR     SaveIDPtr⓪+MOVEQ   #10,D3⓪+BRA.L   DATAFI⓪ ⓪ NOLPRCD  CMPI.W  #$820C,D3       ; ARRAY - TYP ?⓪)BEQ     isTyped⓪)CMPI.W  #$820D,D3       ; RECORD - TYP ?⓪)BEQ     isTyped⓪)CMPI.W  #$8214,D3       ; POINTER - TYP ?⓪)BNE     NOPTR⓪ ⓪ isTyped    CLR.L   D0⓪+MOVEQ   #14,D3⓪+BRA.L   DATAFI⓪ ⓪ NOPTR    ANDI.W  #$80FF,D3⓪)CMP     #$801C,D3         ;TABLE?⓪)BNE     NOTAB⓪ ⓪+MOVEQ   #-10,D3⓪+JSR     SaveIDPtr⓪+MOVEQ   #6,D3⓪+BRA.L   DATAFI⓪)⓪ NOTAB    CMPI.W #$800E,D3         ;Record-Feld ? (Tritt nur waehrend WITH auf)⓪)BNE     NORECRD⓪ ⓪+JMP     AERR24⓪)(* Ist erstmal verboten⓪+MOVE.L  -6(A1,D2.L),D0⓪+MOVEQ   #5,D3⓪+BRA.L   DATAFI⓪)*)⓪ ⓪ NORECRD⓪ ⓪ (* das überlassen wir nun 'NUMDAT':⓪ ⓪*CMPI.W  #$8012,D3        ;CONSTANT ?⓪*BNE.L   NOCONST⓪ ⓪)(* dürfte gar nicht vorkommen:⓪6CMPI.W  #8,-8(A1,D2.L) ;ist Const. 8 Byte lang ?⓪6BHI     ERRILEXP⓪6BCS     NOREALCONST⓪6MOVE.L  -12(A1,D2.L),DATA⓪6MOVE.L  -16(A1,D2.L),DATA2⓪6BRA     REALEXIT⓪4NOREALCONST⓪)*)⓪ ⓪+MOVE.L  -12(A1,D2.L),D0⓪+MOVEQ   #0,D3⓪+CMPI.W  #4,-8(A1,D2.L) ;ist Const. 4 Byte lang ?⓪+BNE     DATAEXP      ;NEIN:short Const.⓪+⓪+;Const. ist vom Typ LONG⓪+MOVEQ   #11,D3⓪+TST.W   DataType⓪+BEQ.L   DATAFI       ;OK: noch keine Expr.⓪+MOVE.W  DataType,D3⓪+BTST    #11,D3       ;Ist Expr. vom Typ L-Const. ?⓪+BNE.L   DATACO       ;JA: OK⓪+BTST    #01,D3       ;Ist Expr. vom Typ External ?⓪+BNE.L   DATACO       ;JA: OK⓪"ERRILEXP JMP     AERR14       ;ERROR:Ill.Expr.⓪ *)⓪ ⓪ NOCONST  CMPI.W  #$800A,D3        ;AUFZAEHLUNGSTYP ?⓪)BNE     DATA2L⓪)⓪+CLR.L   D0⓪+MOVE.W  -4(A1,D2.L),D0⓪+MOVEQ   #4,D3⓪+BRA.L   DATAFI⓪ ⓪ DATA2L   TST.W   D3               ;Noch unbekanntes Label ?⓪)BNE     NONEWLBL⓪)⓪+JSR     NewLabel⓪+MOVE    #1,-16(A1,D2.L) ; Referenz auf Label markieren⓪"C1       MOVEQ   #-6,D3⓪+JSR     SaveIDPtr⓪"C2       MOVEQ   #8,D3⓪+BRA.L   DATAFI⓪+⓪ NONEWLBL CMPI.W  #LabelID,D3      ;BEKANNTES LABEL ?⓪)BNE     NOLBL⓪)⓪+MOVE    #1,-16(A1,D2.L) ; Referenz auf Label markieren⓪+MOVE.L  -6(A1,D2.L),D0 ;Adresse des Labels⓪+BEQ     C1             ;-> noch unbekannt⓪+⓪+TST.W   DataType       ;Expression ?⓪+BEQ     C2             ;NEIN⓪+TST.B   SUBNEXT⓪+BEQ     AER14          ;Addition mit Label illegal⓪+MOVE.W  DataType,D3⓪+BTST    #8,D3⓪+BEQ     AER14          ;ERROR: Source muss auch Label sein⓪+CLR.W   D3⓪+BSET    #0,D3          ;Label-Expr. als W-Konst. kennzeichnen⓪+MOVE.W  D3,DataType⓪+BRA.L   DATACO⓪)⓪ NOLBL    CMPI.W  #STRCONST,D3     ; CHARACTER o. STRING ?⓪)BNE     NUMDAT⓪ ⓪+MOVE.B  STRBUF,D0⓪+EXT.W   D0⓪+EXT.L   D0⓪+MOVE.W  DataType,D3⓪+BEQ     DATASTR1     ;keine Expr.->⓪+BTST    #3,D3⓪+BEQ     AER14        ;ERROR: Source muss auch String sein⓪+BRA.L   DATACO⓪"DATASTR1 MOVEQ   #3,D3⓪+BRA.L   DATAFI⓪"⓪"NUMDAT   JSR     ConstExpr      ; HOLE NUMERISCHE KONSTANTE⓪+JSR     PullInt⓪+JSR     adaptSStoCHAR⓪+MOVE.L  D0,D2⓪+ADDQ    #1,GetLastSbl  ; auf TRUE setzen⓪+⓪+; erst auf REAL testen, denn das ist kein Skalar   %%%%⓪+⓪+MOVE.W  -2(A1,D2.L),D3⓪+CMPI.B  #$02,D3      ; LONG REAL⓪+BEQ     REALNUM⓪+CMPI.B  #42,D3⓪+BEQ     REALNUM      ; SHORT REAL⓪+⓪+; kein REAL - hoffentlich ein skalarer Datentyp⓪+⓪+ANDI.W  #$0100,D3⓪+BEQ     AER1⓪+MOVE.L  Accu,D0⓪+MOVEQ   #2,D3⓪+⓪+TST.W   DataType⓪+BEQ     DATAFI⓪+BMI     AER14        ; ERROR:Source-Adr./Wert noch unbekannt⓪+BRA.L   DATACO       ; OK: Wert aufrechnen ( W-Const. koennen⓪@;  auf alle bek. Werte addiert werden )⓪ ⓪"REALNUM  MOVE.L  Accu,DATA⓪+MOVE.L  AccuS14,DATA2⓪+MOVE.W  DataType,D0⓪+BNE     AER14⓪+BSET    #12,D0⓪+MOVE.W  D0,DataType    ;ID-Typ merken⓪+JSR     AsmGetSbl⓪+MOVE.L  #DATA,D0⓪+RTS⓪ ⓪ DATAFI   MOVE.L  D0,-(A7)⓪)MOVE.W  DataType,D0⓪)ANDI.W  #$7FFF,D0⓪)BNE     AER14          ;Es darf noch kein ID definiert sein⓪)MOVE.W  DataType,D0⓪)BSET    D3,D0⓪)MOVE.W  D0,DataType    ;ID-Typ merken⓪)MOVE.L  (A7)+,D0⓪)⓪ DATACO   TST.B   SUBNEXT⓪)BEQ     DATA5⓪)SUB.L   D0,Data⓪)BRA     DATA6⓪ DATA5    ADD.L   D0,Data⓪)⓪ DATA6    MOVE.L  D2,SaveD2⓪)JSR     AsmGetSbl⓪)SF      SUBNEXT⓪)CMPI.W  #AS37,D3     ; '.'⓪)BEQ     RecFeld⓪)⓪)CMPI.W  #AS3,D3      ; '+'⓪)BEQ     DATAPLUS⓪)CMP     #AS4,D3      ; '-'⓪)BNE     DATAENDL⓪)⓪)ST      SUBNEXT⓪)MOVE.L  D2,SaveD2⓪ DATAPLUS JSR     AsmGetSbl⓪)BRA     DATAL⓪ ⓪ DATAENDL ; Pruefe Datengroesse bez. 'DataType'⓪)MOVE.W  DataType,D0⓪)⓪)BTST    #14,D0             ;ist ID = TYPE ?⓪)BNE     AER14              ;JA: ERROR⓪)⓪)ANDI.W  #011000111001%,D0  ;maskiere alle L-Werte weg⓪)BEQ     DATAEND2           ;OK: das Datum darf L-Werte haben⓪)⓪);Test,ob 'Data' groeser als WORD:⓪)CMPI.L  #$10000,Data⓪)BCS     DATAEND2⓪)CMPI.L  #$FFFF0000,Data⓪)BHI     DATAEND2⓪)JMP     AERR16⓪ ⓪ DATAEND2 END⓪ END GetExpr;⓪ ⓪ ⓪ PROCEDURE RetTRUE;⓪"BEGIN⓪"ASSEMBLER  MOVE.W  D0,-(A7)⓪+JSR     AsmGetSbl⓪+MOVE.W  (A7)+,D0⓪+ORI     #4,CCR⓪"END⓪"END RetTRUE;⓪ ⓪ ⓪ PROCEDURE RetFALSE;⓪"BEGIN⓪"ASSEMBLER  ANDI    #$FB,CCR⓪"END⓪"END RetFALSE;⓪ ⓪ ⓪ PROCEDURE Test_Dn;⓪ BEGIN⓪ ASSEMBLER  JSR     AsmSameSbl⓪)CMPI    #AS18,D3       ;'D0'⓪)BCC     L1⓪ L2       JMP     RetFALSE⓪ !L1      CMPI    #AS25,D3       ;'D7'⓪)BHI     L2⓪)SUB     #AS18,D3       ;'D0'⓪)MOVE    D3,D0⓪)JMP     RetTRUE⓪ END⓪ END Test_Dn;⓪ ⓪ ⓪ PROCEDURE Test_An;⓪ BEGIN⓪ ASSEMBLER  JSR     AsmSameSbl⓪)CMPI    #AS_FP,D3      ;'FP'⓪)BNE     L4⓪)MOVE    VarReg,D0⓪)SUBQ    #8,D0⓪)JMP     RetTRUE⓪ L4       CMPI    #AS26,D3       ;'SP'⓪)BNE     L3⓪)MOVEQ   #7,D0⓪)JMP     RetTRUE⓪ L3       CMPI    #AS10,D3       ;'A0'⓪)BCC     L1⓪ L2       JMP     RetFALSE⓪ !L1      CMPI    #AS17,D3       ;'A7'⓪)BHI     L2⓪)SUB     #AS10,D3       ;'A0'⓪)MOVE    D3,D0⓪)JMP     RetTRUE⓪ END⓪ END Test_An;⓪ ⓪ (*$ ? Asm20:⓪ ⓪ PROCEDURE Test_FPn;⓪ BEGIN⓪ ASSEMBLER  JSR     AsmSameSbl⓪)CMPI    #AS_FP0,D3     ;FP0⓪)BCS     FPT1⓪)CMPI    #AS_FP7,D3⓪)BHI     FPT1⓪)SUB     #AS_FP0,D3⓪)MOVE    D3,D0⓪)JMP     RetTRUE⓪ FPT1     JMP     RetFALSE⓪ END⓪ END Test_FPn;⓪ ⓪ ⓪ PROCEDURE Test_FCn;⓪ BEGIN⓪ ASSEMBLER  JSR     AsmSameSbl⓪)CMPI    #AS_FPIAR,D3⓪)BNE     FCT1⓪)MOVEQ   #$00,D0⓪ FCTRT    JMP     RETTRUE⓪ FCT1     CMPI    #AS_FPSR,D3⓪)BNE     FCT2⓪)MOVEQ   #$01,D0⓪)BRA     FCTRT⓪ FCT2     CMPI    #AS_FPCR,D3⓪)BNE     FCT3⓪)MOVEQ   #$02,D0⓪)BRA     FCTRT⓪ FCT3     JMP     RETFALSE⓪ END⓪ END Test_FCn;⓪ *)⓪ ⓪ PROCEDURE Test_Rn;⓪ BEGIN⓪ ASSEMBLER  JSR     Test_Dn⓪)BEQ     C1⓪)JSR     Test_An⓪)BNE     C2⓪)ADDQ.L  #8,D0⓪ C1       ORI     #4,CCR⓪ C2⓪ END⓪ END Test_Rn;⓪ ⓪ ⓪ PROCEDURE Test_Ind_An;⓪ BEGIN⓪ ASSEMBLER  JSR     AsmSameSbl⓪)CMPI    #AS1,D3        ; '(' ?⓪)BEQ     L1⓪ !JDR1    JMP     RetFALSE⓪ !L1      CMPI.B  #'A',(A2)⓪)BEQ     ARIND1⓪)CMPI.B  #'a',(A2)⓪)BEQ     ARIND1⓪)CMPI.B  #'S',(A2)      ; vielleicht SP ?⓪)BEQ     ARIND1SP⓪)CMPI.B  #'s',(A2)      ; vielleicht SP ?⓪)BNE     JDR1⓪ ARIND1SP CMPI.B  #'P',1(A2)⓪)BEQ     ARIND2⓪)CMPI.B  #'p',1(A2)⓪)BEQ     ARIND2⓪)BRA     JDR1⓪ ARIND1   CMPI.B  #'0',1(A2)⓪)BCS     JDR1⓪)CMPI.B  #'7',1(A2)⓪)BHI     JDR1⓪ ARIND2   CMPI.B  #')',2(A2)⓪)BNE     JDR1⓪)JSR     AsmGetSbl⓪)JSR     Test_An⓪)BEQ     OK⓪)JMP     AERR1⓪ !OK      CMPI    #AS2,D3        ; ')'⓪)BNE     JDR1⓪)JMP     RetTRUE⓪ END⓪ END Test_Ind_An;⓪ ⓪ ⓪ PROCEDURE Test_Ind_Dn;⓪ BEGIN⓪ ASSEMBLER  JSR     AsmSameSbl⓪)CMPI    #AS1,D3        ; '(' ?⓪)BEQ     L1⓪ !JDR1    JMP     RetFALSE⓪ !L1      CMPI.B  #'D',(A2)⓪)BEQ     ARIND1⓪)CMPI.B  #'d',(A2)⓪)BNE     JDR1⓪ ARIND1   CMPI.B  #'0',1(A2)⓪)BCS     JDR1⓪)CMPI.B  #'7',1(A2)⓪)BHI     JDR1⓪)CMPI.B  #')',2(A2)⓪)BNE     JDR1⓪)JSR     AsmGetSbl⓪)JSR     Test_Dn⓪)BEQ     OK⓪)JMP     AERR1⓪ !OK      CMPI    #AS2,D3        ; ')'⓪)BNE     JDR1⓪)JMP     RetTRUE⓪ END⓪ END Test_Ind_Dn;⓪ ⓪ ⓪ VAR KommaExp:BITE; (* Bit 0 gesetzt: Komma ist bei nächstem Symbol erlaubt *)⓪'Outer:BITE; (* FLAG *)⓪ PROCEDURE GetEA_U;⓪ BEGIN⓪ ASSEMBLER  CLR.B   Mode⓪)CLR.W   DataType⓪)CLR.L   Data⓪)CLR.W   RegList⓪)CLR.B   Reg⓪)CLR.B   M20Flg⓪)BCLR    #0,KommaExp⓪)⓪)JSR     Test_Rn⓪)BNE.L   GADRFP⓪)⓪)CMPI    #AS5,D3        ;'/'⓪)BEQ     GADR3⓪)CMPI    #AS4,D3        ;'-'⓪)BEQ     GADRM⓪)⓪+CMPI.W  #8,D0⓪+BCS     DN⓪+⓪+MOVE.B  #2,Mode⓪+ANDI.B  #7,D0⓪+MOVE.B  D0,Reg⓪+RTS⓪+⓪"DN       MOVE.B  #1,Mode⓪+MOVE.B  D0,Reg⓪+RTS⓪+⓪";Registerliste auswerten⓪"GADR3    MOVE    RegList,D2⓪+BSET    D0,D2⓪+MOVE    D2,RegList⓪"GADR34   CMPI    #AS5,D3      ;'/'⓪+BEQ     GADR5⓪+CMPI    #AS4,D3      ;'-'⓪+BEQ     GADRM⓪+MOVE.B  #18,Mode⓪+RTS⓪+⓪"!GADR5   JSR     AsmGetSbl⓪+JSR     Test_Rn⓪+BEQ     GADR3⓪+⓪"AER1     JMP     AERR1⓪"AER20    JMP     AERR20⓪+⓪"GADRM    MOVE.W  D0,-(A7)⓪+JSR     AsmGetSbl⓪+JSR     Test_Rn⓪+BNE     AER1⓪+MOVE.W  (A7)+,D1⓪+CMP.W   D1,D0⓪+BCC     GADRM2⓪+JMP     AERR2        ;ERROR: 2.Reg.>1.Reg.⓪"GADRM2   MOVE.W  RegList,D2⓪+BSET    D1,D2⓪+MOVE.W  D2,RegList⓪+ADDQ.W  #1,D1⓪+CMP.W   D0,D1⓪+BLS     GADRM2⓪+BRA     GADR34⓪)⓪); Flotingpoint register testen⓪ GADRFP⓪ (*$ ? Asm20:⓪)JSR     Test_FPn⓪)BNE.L   GADRFC⓪+⓪)CMPI    #AS5,D3        ;'/'⓪)BEQ     GADRFP3⓪)CMPI    #AS4,D3        ;'-'⓪)BEQ     GADRFPM⓪+⓪+MOVE.B  #25,Mode⓪+MOVE.B  D0,Reg⓪+RTS⓪+⓪+;Floatingpoint Registerliste auswerten⓪"GADRFP3  MOVE    RegList,D2⓪+BSET    D0,D2⓪+MOVE    D2,RegList⓪"GADRFP34 CMPI    #AS5,D3      ;'/'⓪+BEQ     GADRFP5⓪+CMPI    #AS4,D3      ;'-'⓪+BEQ     GADRFPM⓪+MOVE.B  #26,Mode⓪+RTS⓪+⓪"GADRFP5  JSR     AsmGetSbl⓪+JSR     Test_FPn⓪+BEQ     GADRFP3⓪+BRA.L   AER1⓪+⓪"GADRFPM  MOVE.W  D0,-(A7)⓪+JSR     AsmGetSbl⓪+JSR     Test_FPn⓪+BNE.L   AER1⓪+MOVE.W  (A7)+,D1⓪+CMP.W   D1,D0⓪+BCC     GADRFPM2⓪+JMP     AERR2        ;ERROR: 2.Reg.>1.Reg.⓪"GADRFPM2 MOVE.W  RegList,D2⓪+BSET    D1,D2⓪+MOVE.W  D2,RegList⓪+ADDQ.W  #1,D1⓪+CMP.W   D0,D1⓪+BLS     GADRFPM2⓪+BRA     GADRFP34⓪)⓪+⓪); Floatingpoint control-Register Testen⓪ GADRFC   JSR     Test_FCn⓪)BNE     GADR1⓪)⓪)CMPI    #AS5,D3        ;'/'⓪)BEQ     GADRFC3⓪)⓪+MOVE.B  #27,Mode⓪+MOVE.B  D0,Reg⓪+RTS⓪+⓪+; Floatingpoint control-Registerliste auswerten⓪"GADRFC3  MOVE    RegList,D2⓪+BSET    D0,D2⓪+MOVE    D2,RegList⓪+CMPI    #AS5,D3      ;'/'⓪+BEQ     GADRFC5⓪+MOVE.B  #28,Mode⓪+RTS⓪+⓪"GADRFC5  JSR     AsmGetSbl⓪+JSR     Test_FCn⓪+BEQ     GADRFC3⓪+BRA.L   AER1⓪ ⓪ GADR1⓪'*)⓪+JSR     Test_Ind_An⓪+BNE     GADR8⓪)⓪+MOVE.B  D0,Reg⓪+MOVE.B  #4,Mode⓪+CMPI    #AS3,D3        ;'+'⓪+BEQ     GADR7⓪+MOVE.B  #3,Mode⓪+RTS⓪"!GADR7   JMP     AsmGetSbl⓪ ⓪ GADR8    JSR     Test_Ind_Dn⓪)BNE     GADR81⓪)⓪+MOVE.B  D0,Reg⓪+MOVE.B  #17,Mode⓪+RTS⓪ ⓪ GADR81   CMPI    #AS4,D3        ; '-' ?⓪)BNE     GADR9⓪)⓪+CMPI.B  #'(',(A2)⓪+BNE.L   GADR11       ;keine Klammer? Dann ist es eine num.Konstante⓪+⓪+JSR     AsmGetSbl⓪+JSR     Test_Ind_An⓪+BNE     AER1⓪+MOVE.B  D0,Reg⓪+MOVE.B  #5,Mode⓪+RTS⓪ ⓪ GADR9    CMPI    #AS9,D3       ; '#'⓪)BNE     GADR10⓪)⓪+; '#data'⓪+MOVE.B  #12,Mode⓪+JSR     AsmGetSbl⓪+JMP     GetExpr⓪ ⓪ GADR10   CMPI    #AS29,D3        ; SR ? nein ->⓪)BNE     GADR28⓪+⓪+MOVE.B  #13,Mode⓪+JMP     AsmGetSbl⓪ ⓪ GADR28   CMPI    #AS30,D3        ; USP ?⓪)BNE     GADR29⓪+⓪+MOVE.B  #14,Mode⓪+JMP     AsmGetSbl⓪ ⓪ GADR29   CMPI    #AS31,D3        ; CCR ? nein ->⓪)BNE     GADR30⓪+⓪+MOVE.B  #15,Mode⓪+JMP     AsmGetSbl⓪)⓪ GADR30   CMPI    #AS32,D3        ; VBR ? nein ->⓪)BNE.L   GADR100⓪+⓪+MOVE.B  #16,Mode⓪+JMP     AsmGetSbl⓪ ⓪ TstScale ; Scaling auswerten⓪-⓪-MOVE.B  #1,IndScale⓪-CMPI    #AS_Astrx,D3⓪-BNE     TscE⓪-JSR     AsmGetSbl⓪-MOVE.L  Data,-(A7)         ; Data retten, da von GetExpr zerstört⓪-MOVE    DataType,-(A7)     ; ebenfalls retten⓪-JSR     GetExpr⓪-MOVE    DataType,D0⓪-ANDI    #1111111111010%,D0  ; nur Consts erlaubt⓪-BEQ     Gadr183⓪-JMP     AERR13         ;'ILLEGAL adressing mode'⓪$AER2     JMP     AERR2          ;'ILLEGAL operand size'⓪$Gadr183  MOVE.L  Data,D0        ; als Data nur 1,2,4 oder 8 erlaubt⓪-MOVE    (A7)+,DataType⓪-MOVE.L  (A7)+,Data⓪-TST.L   D0⓪-BEQ     AER2⓪-CMPI.L  #8,D0⓪-BEQ     Gadr185⓪-CMPI.L  #4,D0⓪-BHI     AER2⓪-BEQ     Gadr185⓪-CMPI.B  #3,D0⓪-BEQ     AER2⓪$Gadr185  ; Alles OK⓪-MOVE.B  D0,IndScale⓪$TscE     RTS⓪-⓪ ; Überprüfung aller erw. Adr.-Arten der 68020⓪ ⓪ GADR100⓪ (*$ ? Asm20:⓪)CMPI    #AS_SFC,D3⓪)BNE     GADR101⓪)⓪+MOVE.B  #19,Mode⓪+JMP     AsmGetSbl⓪)⓪ Gadr101  CMPI    #AS_DFC,D3⓪)BNE     GADR102⓪)⓪+MOVE.B  #20,Mode⓪+JMP     AsmGetSbl⓪)⓪ Gadr102  CMPI    #AS_CACR,D3⓪)BNE     GADR103⓪)⓪+MOVE.B  #21,Mode⓪+JMP     AsmGetSbl⓪)⓪ Gadr103  CMPI    #AS_CAAR,D3⓪)BNE     GADR130⓪)⓪+MOVE.B  #22,Mode⓪+JMP     AsmGetSbl⓪)⓪ Gadr130  CMPI    #AS_MSP,D3⓪)BNE     GADR131⓪)⓪+MOVE.B  #23,Mode⓪+JMP     AsmGetSbl⓪)⓪ Gadr131  CMPI    #AS_ISP,D3⓪)BNE     GADR104⓪)⓪+MOVE.B  #24,Mode⓪+JMP     AsmGetSbl⓪)⓪ Gadr104  CMPI    #AS1,D3     ; '(' ?⓪)BNE.L   GADR11⓪)⓪)MOVE.L  OPTIONS,D2⓪)LSR     #1,D2          ;Soll BREAK erfolgen ?⓪)BCC     noBrk          ;nein⓪)BREAK⓪)⓪ noBrk    ; erw. Adr. Arten mit '([bd,An/PC],Xn.Size*Scale],od)'⓪)⓪+MOVE.B  #7,Mode     ; Nehmen wir erstmal an⓪+⓪"GadrLoop JSR     AsmGetSbl⓪+⓪"GadrLpC  CMPI    #AS38,D3     ; ',' ?⓪+BNE     GADR142⓪-⓪-BCLR    #0,KommaExp⓪-BEQ     AER1⓪-BRA     GadrLoop⓪-⓪"Gadr142  CMPI    #AS2,D3     ; ')' ?⓪+BNE     GADR105⓪-⓪-; Test, ob nur '[' oder nur ']', sonst Ende⓪-BTST    #FlgeKlA,M20Flg⓪-BEQ     Gadr140⓪-BTST    #FlgeKlZ,M20Flg⓪-BEQ     AER1⓪$Gadr141  BSET    #FlgIs20,M20Flg    ; So hiermit wird erw. Adr-Art markiert⓪-JMP     AsmGetSbl⓪-⓪$Gadr140  BTST    #FlgeKlZ,M20Flg⓪-BNE     AER1⓪-BRA     Gadr141⓪-⓪"Gadr105  CMPI    #AS_eKlA,D3     ; '[' ?⓪+BNE     GADR106⓪-⓪-TST.B   M20Flg⓪-BNE     AER1            ; Es darf noch nix markiert sein⓪-BSET    #FlgeKlA,M20Flg⓪-BRA     GadrLoop⓪-⓪"Gadr106  CMPI    #AS_eKlZ,D3     ; ']' ?⓪+BNE     GADR107⓪-⓪-MOVE.B  M20Flg,D0⓪-BCLR    #FlgeKlA,D0⓪-BEQ     AER1            ; '[' muß schon auf sein⓪-TST.B   D0⓪-BEQ     AER20           ; unsinnige Adr.-Art⓪-BSET    #FlgeKlZ,M20Flg⓪-BNE     AER1            ; ']' darf noch nicht gewesen sein⓪-BSET    #0,KommaExp⓪-BTST    #FlgXn,D0⓪-BEQ     GadrLoop⓪-BSET    #FlgPreIx,M20Flg  ; PreIndexed markieren⓪-BRA     GadrLoop⓪-⓪"Gadr107  CMPI    #AS35,D3     ; 'PC' ?⓪+BNE     GADR108⓪-⓪-MOVE.B  #11,Mode     ; Korrektur der Annahme⓪-JSR     AsmGetSbl⓪-⓪$Gadr170  MOVE.B  M20Flg,D0⓪-BCLR    #FlgeKlA,D0⓪-BCLR    #Flgbd,D0⓪-TST.B   D0⓪-BNE     AER1⓪-BSET    #FlgAnPC,M20Flg⓪-BSET    #0,KommaExp⓪-BRA     GadrLpC⓪-⓪"Gadr108  JSR     Test_Rn⓪+BNE.L   GADR109⓪-⓪-CMPI    #AS37,D3        ; '.' ?⓪-BEQ     GADR181         ; Ja -> muß Indexreg. sein⓪/⓪/SUBQ    #8,D0           ; Adreßregister ?⓪/BCS     AER1            ; Nein -> Error⓪/⓪/; Base Register An⓪/MOVE.B  D0,Reg⓪/BRA     Gadr170⓪/⓪$Gadr181  ; Index Register Xn.Size*Scale⓪-⓪-CMPI    #8,D0⓪-SCS     IndType⓪-ANDI    #7,D0⓪-MOVE.B  D0,IndReg⓪-⓪-BSET    #FlgXn,M20Flg⓪-BNE     AER1⓪-BTST    #FlgOd,M20Flg⓪-BNE     AER1⓪-⓪-MOVE.B  #4,IndSize⓪-CMPI.B  #'L',(A2)⓪-BEQ     GADR182⓪-CMPI.B  #'l',(A2)⓪-BEQ     GADR182⓪-MOVE.B  #2,IndSize⓪-CMPI.B  #'W',(A2)⓪-BEQ     GADR182⓪-CMPI.B  #'w',(A2)⓪-BNE     AER1⓪)⓪$GADR182  ADDQ.L  #1,A2⓪-JSR     AsmGetSbl⓪-BSR     TstScale⓪-BSET    #0,KommaExp⓪-BRA     GadrLpC⓪-⓪"Gadr109  ; Jetzt kann's nur noch OD oder BD sein⓪-⓪-BTST    #FlgeKlZ,M20Flg⓪-SNE     Outer⓪-⓪-MOVE.L  Data,-(A7)         ; Data retten, da von GetExpr zerstört⓪-MOVE    DataType,-(A7)     ; ebenfalls retten⓪-JSR     GetExpr⓪-MOVE.L  Data,D0⓪-MOVE    DataType,D1⓪-MOVE    (A7)+,DataType⓪-MOVE.L  (A7)+,Data⓪-TST.B   Outer⓪-BNE     Gadr191⓪-⓪-; Base Displacement⓪-MOVE.L  D0,Data⓪-MOVE    D1,DataType⓪-MOVE.B  M20Flg,D2⓪-BCLR    #FlgeKlA,D2⓪-TST.B   D2                 ; außer '[' darf noch nix sein⓪-BNE     AER1⓪-BSET    #FlgBd,M20Flg⓪-BNE     AER1⓪-BSET    #0,KommaExp⓪-BRA     GadrLpC⓪-⓪$Gadr191  ; Outer Displacement⓪-BSET    #FlgOd,M20Flg⓪-BNE     AER1⓪-MOVE.L  D0,DataOd⓪-MOVE    D1,DataTypeOd⓪-BRA     GadrLpC⓪ *)⓪-⓪ ; Ausdruck holen und Test auf indirekte Adr. (alte 68000 Adr.-Arten)⓪ ⓪ GADR11   JSR     GetExpr        ;Ausdruck wird ausdruecklich erwartet.⓪)JSR     Test_Ind_An⓪)BNE.L   GADR13⓪)⓪+; 'd16(An)'⓪+MOVE.B  D0,Reg⓪+MOVE.B  #6,Mode⓪+RTS⓪ ⓪ GADR13   CMPI.W  #AS1,D3        ; '(' ?⓪)BEQ     GADR14⓪)⓪+; 'd32'⓪+MOVE.B  #9,Mode⓪+RTS⓪)⓪ GADR14   JSR     AsmGetSbl⓪)JSR     Test_An⓪)BEQ     GADR19⓪)⓪)CMPI    #AS35,D3       ; 'PC' ?⓪)BNE     AER1⓪)⓪+JSR     AsmGetSbl⓪+CMPI    #AS2,D3        ; ')' ?⓪+BNE     GADR26⓪+⓪-; 'd16(PC)'⓪-MOVE.B  #10,Mode⓪-JMP     AsmGetSbl⓪"⓪"GADR26   ; 'd8(PC,Rn.X)'⓪+MOVE.B  #11,Mode⓪+BRA.L   GADR24⓪+⓪"GADR19   ; 'd8(An,Rn.X)'⓪+MOVE.B  D0,Reg⓪+MOVE.B  #7,Mode⓪ ⓪"!GADR24  CMPI.W  #AS38,D3       ; ',' ?⓪+BNE     AER1⓪+JSR     AsmGetSbl⓪+JSR     Test_Rn⓪+BNE     AER1⓪+CMPI    #8,D0⓪+SCS     IndType⓪+ANDI    #7,D0⓪+MOVE.B  D0,IndReg⓪+CMPI    #AS37,D3     ; '.'⓪+BNE     AER1⓪+⓪+MOVE.B  #4,IndSize⓪+CMPI.B  #'L',(A2)⓪+BEQ     GADR39⓪+CMPI.B  #'l',(A2)⓪+BEQ     GADR39⓪+⓪+MOVE.B  #2,IndSize⓪+CMPI.B  #'W',(A2)⓪+BEQ     GADR39⓪+CMPI.B  #'w',(A2)⓪+BNE     AER1⓪+⓪"GADR39   ADDQ.L  #1,A2⓪+JSR     AsmGetSbl⓪+BSR     TstScale⓪+CMPI.W  #AS2,D3      ; ')'⓪+BNE     AER1⓪+JMP     AsmGetSbl⓪ END⓪ END GetEA_U;⓪ ⓪ PROCEDURE GetEA_U0;⓪ BEGIN⓪ ASSEMBLER  JSR     GetEA_U⓪ (*$ ? Asm20:⓪)MOVE.L  AsmOptions,D0⓪)BTST    #24,D0    ; $X in Options ?⓪)BNE     ok        ; Ja: 68020-EAs erlaubt⓪)MOVE.B  Mode,D0⓪)CMPI.B  #17,D0⓪)BEQ     err0⓪)CMPI.B  #18,D0⓪)BHI     err0⓪)BTST    #FlgIs20,M20Flg⓪)BEQ     ok⓪ err0     JMP     AERR21⓪ ok⓪ *)⓪ END⓪ END GetEA_U0;⓪ ⓪ PROCEDURE GetEA;⓪ BEGIN⓪ ASSEMBLER  JSR     GetEA_U0⓪ ⓪ (*$ ? Asm20:⓪ ⓪ ; Test auf Bitfield (static/dynamic k-Factor bei FPU)⓪)JSR     AsmSameSbl⓪)CMPI    #AS_gKlA,D3    ; '{' ?⓪)BNE.L   NotBitField⓪)⓪)JSR     AsmGetSbl⓪)BSR.L   GetIndic⓪)MOVE.W  D1,-(A7)⓪)CMPI    #AS_dPnkt,D3    ; ':' ?⓪)BNE     TestFormatQualifier⓪)⓪)TST.W   (A7)+⓪)BNE     isRegO⓪)CMPI.L  #31,D0         ; als Data nur 0-31 erlaubt⓪)BHI.L   AER2⓪ isRegO   OR      D1,D0⓪)MOVE.B  D0,BitOffs⓪)JSR     AsmGetSbl⓪)BSR.L   GetIndic⓪)BNE     isRegW⓪)CMPI.L  #32,D0         ; als Data nur 1-32 erlaubt⓪)BHI.L   AER2⓪)TST     D0⓪)BEQ.L   AER2⓪)ANDI    #$1F,D0⓪ isRegW   OR      D1,D0⓪)MOVE.B  D0,BitWidth⓪)CMPI    #AS_gKlZ,D3    ; '}' ?⓪)BNE.L   AER1⓪)BSET    #6,Mode⓪)JMP     AsmGetSbl⓪ ⓪ TestFormatQualifier⓪)MOVE.W  MODE,MODE2      ; 68881 Formatangaben⓪)TST.W   (A7)+⓪)BNE     isRegf⓪)⓪)MOVE.B  #30,MODE⓪)CMPI.L  #17,D0          ; Nur Werte von -64 ... +17 zulässig⓪)BGT     AER1⓪)CMPI.L  #-64,D0⓪)BLT     AER1⓪)ANDI.B  #$7F,D0⓪)BRA     testkzu⓪)⓪ isRegf⓪)MOVE.B  #29,MODE⓪ ⓪ testkzu⓪)MOVE.B  D0,Format⓪)CMPI    #AS_gKlZ,D3    ; '}' ?⓪)BNE     AER1⓪)JMP     AsmGetSbl⓪ ⓪ NotBitField⓪); Nun testen wir auf Doppelregister⓪)CMPI    #AS_dPnkt,D3   ; ':' ?⓪)BNE     NoDoubleReg⓪)⓪)MOVE.B  mode,-(A7)⓪)MOVE.B  reg,-(A7)      ; Data und DataType brauchen wir nicht retten⓪)JSR     AsmGetSbl⓪)JSR     GetEA_U0⓪)MOVE.B  reg,reg2⓪)MOVE.B  (A7)+,reg⓪)MOVE.B  Mode,mode2⓪)MOVE.B  (A7)+,mode⓪)BSET    #7,Mode⓪)RTS⓪)⓪ NoDoubleReg⓪)RTS⓪ ⓪ AER1     JMP     AERR1⓪ AER2     JMP     AERR2⓪ AER13    JMP     AERR13⓪ ⓪ GetIndic JSR     Test_Dn⓪)BNE     c1⓪)MOVEQ   #$20,D1        ; Markierung f. Register-Indizierung⓪)RTS⓪ c1       CMPI    #AS9,D3       ; '#' einfach ignorieren (bei k-Factor)⓪)BNE     c2⓪)JSR     AsmGetSbl⓪ c2       MOVE.L  Data,-(A7)     ; Data retten, da von GetExpr zerstört⓪)MOVE    DataType,-(A7)⓪)JSR     GetExpr⓪)MOVE    DataType,D0⓪)ANDI    #1111111111010%,D0  ; nur Consts erlaubt⓪)BNE     AER13⓪)MOVE.L  Data,D0⓪)MOVE    (A7)+,DataType⓪)MOVE.L  (A7)+,Data⓪)MOVEQ   #0,D1⓪ *)⓪ END⓪ END GetEA;⓪ ⓪ PROCEDURE RegTo0_2;⓪ BEGIN⓪ ASSEMBLER  OR.B    D0,D1⓪ END⓪ END RegTo0_2;⓪ ⓪ PROCEDURE RegTo9_11;⓪ BEGIN⓪ ASSEMBLER  ANDI    #$FF,D0⓪)LSL     #4,D0⓪)LSL     #5,D0⓪)OR      D0,D1⓪ END⓪ END RegTo9_11;⓪)⓪ PROCEDURE SizeTo6_7;⓪ BEGIN⓪ ASSEMBLER  TST.B   D0⓪)BNE     OK⓪)JMP     AERR2⓪ OK       CMPI.B  #1,D0⓪)BEQ     ADR3A⓪)CMPI.B  #2,D0⓪)BEQ     ADR3B⓪)ORI     #$80,D1⓪)RTS⓪ ADR3B    ORI     #$40,D1⓪ !ADR3A   RTS⓪ END⓪ END SizeTo6_7;⓪ ⓪ ⓪ PROCEDURE VerifySize;⓪ BEGIN⓪ ASSEMBLER  CMP.B   SizeOfData,D0⓪)BEQ     C1⓪)TST.B   SizeOfData⓪)BEQ     C1⓪)JMP     AERR2⓪ C1       ;altes D0 bleibt erhalten⓪)RTS⓪ END⓪ END VerifySize;⓪ ⓪ ⓪ PROCEDURE LoadSize;⓪ BEGIN⓪ ASSEMBLER  MOVE.B  SizeOfData,D0⓪)BNE     C1⓪)MOVEQ   #DefltSiz,D0⓪ C1       CMPI.B  #4,D0⓪)BLS     ok⓪)JMP     AERR2⓪ ok⓪ END⓪ END LoadSize;⓪ ⓪ ⓪ PROCEDURE ErrIfSize;⓪ BEGIN⓪ ASSEMBLER  TST.B   SizeOfData⓪)BEQ     C1⓪)JMP     AERR2⓪ C1       RTS⓪ END⓪ END ErrIfSize;⓪ ⓪ ⓪ PROCEDURE SizeTo12_13;⓪ (* D0 nicht verändern ! *)⓪ BEGIN⓪ ASSEMBLER  CMPI.B  #1,D0⓪)BEQ     ADR10A⓪)CMPI.B  #4,D0⓪)BEQ     ADR10B⓪)ORI     #$3000,D1⓪)RTS⓪ !ADR10A  ORI     #$1000,D1⓪)RTS⓪ !ADR10B  ORI     #$2000,D1⓪ END⓪ END SizeTo12_13;⓪ ⓪ ⓪ PROCEDURE SizeTo9_10;           (* 00/01/10 *)⓪ BEGIN⓪ ASSEMBLER  CMPI.B  #1,D0⓪)BEQ     ADR10A⓪)CMPI.B  #4,D0⓪)BEQ     ADR10B⓪)BSET    #9,D1⓪)RTS⓪ adr10b   BSET    #10,D1⓪ adr10a⓪ END⓪ END SizeTo9_10;⓪ ⓪ ⓪ PROCEDURE Size2To9_10;           (* 01/10/11 *)⓪ BEGIN⓪ ASSEMBLER  ORI     #$0600,D1⓪)CMPI.B  #4,D0⓪)BEQ     ADR10A⓪)CMPI.B  #2,D0⓪)BEQ     ADR10B⓪)BCLR    #10,D1⓪)RTS⓪ adr10b   BCLR    #9,D1⓪ adr10a⓪ END⓪ END Size2To9_10;⓪ ⓪ ⓪ PROCEDURE ErrIfOp2;⓪ BEGIN⓪ ASSEMBLER  TST.B   ModeDest⓪)BEQ     OK⓪)JMP     AERR1⓪ !OK      RTS⓪ END⓪ END ErrIfOp2;⓪ ⓪ ⓪ (*⓪ *   <ea> nach D1, Bit 0-5⓪ *)⓪ PROCEDURE EAto0_5;⓪ BEGIN⓪ ASSEMBLER⓪)MOVE.W  D1,-(A7)⓪)CLR.W   D1⓪)MOVE.B  Mode,D0⓪)BEQ.L   JAER1          ;ERROR: Operand expected⓪)CMPI.B  #8,D0          ; d16,d24,(PC),#data ?⓪)BCC.L   ADREA1         ; ja ->⓪)⓪)CMPI.B  #6,D0          ; d16(An) ?⓪)BEQ     ADREA3         ; ja ->⓪)⓪)CMPI.B  #2,D0          ;'An' ?⓪)BNE     C1⓪)CMPI.B  #1,SizeOfData  ;'.B' ?⓪)BEQ.L   AER2           ;ERROR: Byteverarb. bei Adr-Reg. nicht zugel.⓪ C1       SUBQ.B  #1,D0⓪)LSL     #3,D0⓪)OR.B    D0,D1⓪)MOVE.B  Reg,D0⓪)JSR     RegTo0_2⓪ E0       OR.W    (A7)+,D1⓪)RTS⓪ ⓪ ADREA3   TST.L   Data⓪)BNE     C1⓪)MOVE    DataType,D0⓪)ANDI    #0000001000111010%,D0  ; Konst., aber nicht explizit ?⓪)BEQ     C12⓪)⓪)MOVEQ   #3,D0          ; d16(An) -> (An) optimieren⓪)MOVE.B  D0,Mode⓪)BRA     C1⓪)⓪ C12      MOVEQ   #6,D0⓪)BRA     C1⓪)⓪ ADREA1   ORI.B   #111000%,D1⓪)CMPI.B  #13,D0⓪)BCC     ADREA11⓪)⓪)SUBQ.B  #8,D0⓪)OR.B    D0,D1⓪)ADDQ.B  #8,D0⓪)BRA     E0⓪ ⓪ ADREA11  CMPI.B  #15,D0         ; 'CCR' ?⓪)BEQ     ADREA10⓪)CMPI.B  #13,D0         ; 'SR' ?⓪)BEQ     ADREA10⓪ ⓪ JAER1    JMP     AERR1⓪ AER2     JMP     AERR2⓪ ⓪ ADREA10  ORI.B   #4,D1⓪)BRA     E0⓪ END⓪ END EAto0_5;⓪ ⓪ ⓪ (* haenge D0.W im Code an *)⓪ PROCEDURE ApndD0_W;⓪ BEGIN⓪ ASSEMBLER⓪)ADDQ    #1,D5⓪)MOVE    D0,(A4)+⓪ END⓪ END ApndD0_W;⓪ ⓪ (* haenge D0.L im Code an *)⓪ PROCEDURE ApndD0_L;⓪ BEGIN⓪ ASSEMBLER  ADDQ    #2,D5⓪)MOVE.L  D0,(A4)+⓪ END⓪ END ApndD0_L;⓪ ⓪ (* hänge (D0.L).D im Code an *)⓪ PROCEDURE ApndD0I_D;⓪ BEGIN⓪ ASSEMBLER  ADDQ    #4,D5⓪)MOVE.L  A0,-(A7)⓪)MOVE.L  D0,A0⓪)MOVE.L  (A0)+,(A4)+⓪)MOVE.L  (A0) ,(A4)+⓪)MOVE.L  (A7)+,A0⓪ END⓪ END ApndD0I_D ;⓪ ⓪ PROCEDURE TestType;⓪"BEGIN⓪"ASSEMBLER⓪)AND.W   DataType,D3⓪)BEQ     OK⓪)JMP     AERR13         ;'ILLEGAL ADRESSING MODE'⓪"OK⓪"END⓪"END TestType;⓪ ⓪ ⓪ PROCEDURE TestTypeSource;⓪"BEGIN⓪"ASSEMBLER⓪)AND.W   DataTypeSource,D3⓪)BEQ     OK⓪)JMP     AERR13         ;'ILLEGAL ADRESSING MODE'⓪"OK⓪"END⓪"END TestTypeSource;⓪ ⓪ ⓪ PROCEDURE TestTypeDest;⓪"BEGIN⓪"ASSEMBLER⓪)AND.W   DataTypeDest,D3⓪)BEQ     OK⓪)JMP     AERR13         ;'ILLEGAL ADRESSING MODE'⓪"OK⓪"END⓪"END TestTypeDest;⓪ ⓪ ⓪ PROCEDURE TestTypeThird;⓪"BEGIN⓪"ASSEMBLER⓪)AND.W   DataTypeThird,D3⓪)BEQ     OK⓪)JMP     AERR13         ;'ILLEGAL ADRESSING MODE'⓪"OK⓪"END⓪"END TestTypeThird;⓪ ⓪ ⓪ PROCEDURE CalcExpr; (* in D3 wird die Size des Datums in Byte uebergeben.⓪5* Wenn Bit 15 in D3 gesetzt, dann sind Labels unerlaubt⓪5* Wenn Bit 14 in D3 gesetzt, ist Wert vorzeichenbehaftet!⓪5* D3.B nicht verändern in dieser Routine ! *)⓪"BEGIN⓪"ASSEMBLER⓪+MOVE.W  DataType,D0⓪+ANDI.W  #1000010100000000%,D0        ; 8, 10 (lok. Lbl/Proc)⓪+BMI.W   UNKNOWN⓪+BNE.W   REL⓪ ⓪+MOVE.W  DataType,D0⓪+ANDI.W  #0001000000000000%,D0        ; 12⓪+BNE.W   REALCONST⓪ ⓪+; konst. bekannter Wert⓪+MOVE.L  Data,D0⓪ ⓪"C11      CMPI.B  #1,D3⓪+BNE     C10⓪ ⓪+BTST    #14,D3⓪+BNE     C112⓪ ⓪+CMPI.L  #$100,D0⓪+BCS     E3⓪+CMPI.L  #$FFFFFF00,D0⓪+BHI     E3⓪"AER16    JMP     AERR16⓪ ⓪"C112     CMPI.L  #$80,D0⓪+BCS     E3⓪+CMPI.L  #$FFFFFF80,D0⓪+BLS     AER16⓪ ⓪"E3       ANDI.W  #$FF,D0⓪+RTS⓪ ⓪"C10      CMPI.B  #2,D3⓪+BNE     E2⓪ ⓪+BTST    #14,D3⓪+BNE     C122⓪ ⓪+CMPI.L  #$10000,D0⓪+BCS     E2⓪+CMPI.L  #$FFFF0000,D0⓪+BLS     AER16⓪"E2       RTS⓪ ⓪"C122     CMPI.L  #$8000,D0⓪+BCS     E2⓪+CMPI.L  #$FFFF8000,D0⓪+BLS     AER16⓪+RTS⓪ ⓪ ⓪"REALCONST⓪+MOVE.L  #Data,D0⓪+RTS⓪ ⓪ ⓪"REL      ; PC-rel. Wert ( bekanntes Label / bekannte lok. PROC. )⓪+MOVE.L  Data,D0⓪+ADD.L   CodeStart,D0⓪+SUB.L   pInstr,D0⓪+SUB.L   D5,D0⓪+SUB.L   D5,D0⓪ ⓪+ORI     #$4000,D3⓪+BRA     C11⓪ ⓪ ⓪"AER2     JMP     AERR2⓪ ⓪"UNKNOWN  ANDI.W  #0111111111111111%,D0⓪+BNE     RELPO⓪ ⓪+; absolute Verkettung ( glob. PROCEDURE / VAR / TABLE )⓪+CMPI.B  #4,D3⓪+BNE     AER2⓪+MOVE.L  pInstr,D4⓪+SUB.L   CodeStart,D4⓪+ADD.L   D5,D4⓪+ADD.L   D5,D4⓪+MOVE.L  IDPtr,A0⓪+MOVE.L  (A0),D0⓪+MOVE.L  D4,(A0)⓪+RTS⓪"⓪"RELPO    ; PC-rel. Verkettung⓪+TST.W   D3⓪+BPL     OK⓪+⓪+JSR     PRTSTR⓪+DC.B    $D⓪+ACZ     'Internal Error #1'⓪+SYNC⓪+BREAK               ;interner ERROR: duerfte hier nicht mehr kommen⓪+⓪"OK       MOVEA.L IDPtr,A0⓪+SUBQ.L  #4,A0⓪+CMPI.B  #1,D3⓪+BNE     C2⓪"C1       SUBQ.L  #4,A0        ;verw. Byte-^, wenn Size = 1 Byte⓪"⓪"C2       MOVE.L  (A0),D0⓪+MOVE.L  pInstr,(A0)⓪+ADD.L   D5,(A0)⓪+ADD.L   D5,(A0)⓪+CMPI.B  #1,D3⓪+BNE     C4⓪+ADDQ.L  #1,(A0)⓪"⓪"C4       TST.L   D0⓪+BEQ     E0⓪+⓪+SUB.L   pInstr,D0⓪+SUB.L   D5,D0⓪+SUB.L   D5,D0⓪+CMPI.B  #1,D3⓪+BNE     C5⓪+SUBQ.L  #1,D0⓪+⓪"C5       ; Offset pruefen⓪+CMPI.B  #1,D3⓪+BNE     C3⓪+⓪+CMPI.L  #$80,D0⓪+BCS     E1⓪+CMPI.L  #$FFFFFF80,D0⓪+BCC     E1⓪+JMP     AERR3⓪+⓪"C3       CMPI.L  #$8000,D0⓪+BCS     E0⓪+CMPI.L  #$FFFF8000,D0⓪+BCC     E0⓪+JMP     AERR3⓪"⓪"E1       BCLR    #7,D0        ;Merker setzen fuer Byte-^⓪+ANDI.W  #$FF,D0⓪"E0       ANDI.L  #$FFFF,D0    ;bei Word-^ oberes Wort f. DC.L/#.L loeschen⓪+RTS⓪"END⓪"END CalcExpr;⓪ ⓪ ⓪ (*⓪ *   <ea> evtl. als Erweiterungswort an Code anhaengen⓪ *)⓪ PROCEDURE ApndEA;⓪ BEGIN⓪ ASSEMBLER⓪)MOVE.B  Mode,D0⓪)BEQ     JAER1          ;ERROR: Operand expected⓪)ANDI    #$3F,D0        ; Doppelregs und Bitfields erstmal ignorieren⓪)CMPI.B  #5,D0          ; d16,d24,(PC),#data ?⓪)BHI     C1             ; ja ->⓪ ⓪ OK       RTS                    ; OK, keine Erweiterungworte anzufuegen⓪ ⓪ C1       CMPI.B  #13,D0         ; SR,CCR,USP,VBR,Reglist ?⓪)BCC     OK             ; ja -> OK⓪)CMPI.B  #07,D0         ; 'd8(An,Rn.X)' / erw. 68020 Adr-Arten ?⓪)BEQ.L   INDX⓪)CMPI.B  #9,D0          ; 'd32' / 'd16' ?⓪)BEQ     D32⓪)CMPI.B  #11,D0         ; 'd8(PC,Rn.X)' ?⓪)BEQ.L   INDX⓪)CMPI.B  #12,D0         ; '#data' ?⓪)BEQ     IMM⓪)CMPI.B  #06,D0         ; 'd16(An)' ?⓪)BEQ     D16IND⓪)CMPI.B  #10,D0         ; 'd16(PC)' ?⓪)BEQ     D16IND⓪)⓪)JSR     PRTSTR⓪)DC.B    $D⓪)ACZ     'Internal Error #2'⓪)SYNC⓪)BREAK               ;interner ERROR: d16 aufgetreten⓪ ⓪ JAER1    JMP     AERR1⓪ AER2     JMP     AERR2⓪ ⓪ ; 'd32'⓪ D32      MOVE.W  #$8004,D3⓪)JSR     CalcExpr⓪ C6       JMP     ApndD0_L⓪ C6P      JMP     ApndD0I_D⓪ ; '#data'⓪ IMM      MOVE.B  SizeOfData,D3⓪)BNE     C4⓪)MOVEQ   #DefltSiz,D3⓪ C4       ORI.W   #$8000,D3      ; Ref. auf Label nicht erlaubt !⓪)JSR     CalcExpr⓪)CMPI.B  #4,D3          ; #.L ?⓪)BEQ     C6⓪)CMPI.B  #$10,D3        ; #.D ?⓪)BEQ     C6P⓪)CMPI.B  #$02,D3⓪)BHI     AER2⓪)JMP     ApndD0_W⓪ ⓪ ; 'd16(An)'⓪ D16IND   MOVE.W  #$4002,D3⓪)CMPI.B  #10,D0       ; PC als Basereg. ?⓪)BEQ     D16PC⓪)ORI     #$8000,D3    ; Bei An als Basereg. rel. Adr. nicht zulassen⓪ D16PC    JSR     CalcExpr⓪)JMP     ApndD0_W⓪ ⓪ GetXn    CLR.W   D0⓪)MOVE.B  IndReg,D0      ; Nummer (n) des 'Rn'⓪)ROR.W   #4,D0⓪)TST.B   IndType        ;'Rn': 'Dn' oder 'An' ?⓪)BNE     C2⓪)BSET    #15,D0         ;-> 'An'⓪ C2       CMPI.B  #2,IndSize     ;Size (X) des 'Rn.X'⓪)BEQ     C3⓪)BSET    #11,D0         ;-> 'Rn.L'⓪ C3       MOVE    D0,-(A7)⓪); Scaling eintragen⓪)MOVE.B  IndScale,D0⓪)SUBQ    #1,D0⓪)BTST    #1,D0⓪)BEQ     C21⓪)BCLR    #2,D0⓪)BNE     C21⓪)BCLR    #0,D0⓪ C21      LSL     #8,D0⓪)LSL     #1,D0⓪)OR      (A7)+,D0⓪)RTS⓪ ⓪ ; 'd8(An,Rn.X)'⓪ INDX⓪ (*$ ? Asm20:⓪)BTST    #FlgIs20,M20Flg⓪)BNE     M20indx        ; erw. Adr-Arten der 68020 auswerten⓪ *)⓪)BSR     GetXn⓪)MOVE.W  D0,-(A7)⓪)MOVE.W  #$4001,D3⓪)MOVE.B  Mode,D0⓪)ANDI    #$3F,D0⓪)CMPI.B  #11,D0       ; PC als Basereg. ?⓪)BEQ     D8PC⓪)ORI     #$8000,D3    ; Bei An als Basereg. rel. Adr. nicht zulassen⓪ D8PC     JSR     CalcExpr⓪)ANDI.W  #$FF,D0⓪)OR.W    (A7)+,D0⓪ ApW      JMP     ApndD0_W⓪ ⓪ (*$ ? Asm20:⓪ ⓪ ApndDisp ; bestimmt Size für Displacement (68020) und fügt an Code an⓪); vorher DataType und Data mit richtigen Daten laden !⓪); Default ist Long, nur bestimmte Datentypen werden als Wort behandelt⓪)⓪)MOVE    DataType,D0⓪)BTST    #12,D0⓪)BEQ     KeinReal⓪)JMP     AERR2⓪)⓪ KeinReal MOVEQ   #4,D3⓪)BTST    #2,D0                  ; Num. Konstante ?⓪)BEQ     TstTyp                 ; Nein⓪)⓪); Num. Konstante auf Größe untersuchen⓪)CMPI.L  #$8000,Data⓪)BCS     WordSize               ; 0 <= Data < $8000⓪)CMPI.L  #$FFFF8000,Data⓪)BCS     LongSize               ; Data < -$8000⓪)BRA     WordSize⓪)⓪ TstTyp   ANDI    #011100111001%,D0⓪)BEQ     LongSize⓪)⓪ WordSize MOVEQ   #2,D3⓪ LongSize JSR     CalcExpr⓪); D3 ist noch erhalten⓪)CMPI.B  #2,D3⓪)BEQ     ApW⓪)JMP     ApndD0_L⓪)⓪)⓪ M20indx  MOVE.L  A4,-(A7)       ; jetzige Code-Pos. merken f. Erw.-Wort⓪)ADDQ.L  #2,A4          ; zunächst überspringen⓪)MOVE.W  #0000000111010000%,D2  ; Default: all Operands suppressed⓪)BTST    #FlgAnPC,M20Flg⓪)BEQ     x0⓪)⓪); Base reg.⓪)BCLR    #7,D2          ; Base reg. added⓪)⓪ x0       BTST    #FlgXn,M20Flg⓪)BEQ     x1⓪)⓪); Index reg.⓪)BSR     GetXn⓪)BCLR    #6,D2          ; Index reg. added⓪)OR      D0,D2⓪)⓪ x1       BTST    #FlgBd,M20Flg⓪)BEQ     x2⓪)⓪); Base displacement⓪)BSR     ApndDisp⓪)BSET    #5,D2          ; Size = W or L⓪)CMPI.B  #2,D3          ; bd Size ?⓪)BNE     x2⓪)BCLR    #4,D2          ; W-Size setzen⓪ ⓪ x2       BTST    #FlgeKlA,M20Flg⓪)BEQ     x3⓪)⓪); memory indirection⓪)⓪)BSET    #0,D2          ; Default: No outer displacement⓪)⓪)BTST    #FlgXn,M20Flg⓪)BEQ     x21⓪)BTST    #FlgPreIx,M20Flg⓪)BNE     x21⓪)⓪)BSET    #2,D2          ; Indirect Post-Indexed⓪)⓪ x21      BTST    #FlgOd,M20Flg⓪)BEQ     x3⓪)⓪); Outer displacement⓪)MOVE.L  DataOd,Data⓪)MOVE    DataTypeOd,DataType⓪)BSR     ApndDisp⓪)BSET    #1,D2          ; Size = W or L⓪)CMPI.B  #2,D3          ; bd Size ?⓪)BNE     x3⓪)BCLR    #0,D2          ; W-Size setzen⓪)⓪ x3       MOVE.L  (A7)+,A0       ; alte Code-Position zurückholen⓪)MOVE    D2,(A0)⓪ *)⓪ END⓪ END ApndEA;⓪ ⓪ ⓪ (*⓪!*   <ea> auf legale Adressierung pruefen⓪!*   folg. Kombinationen sind auschließlich erlaubt:⓪!*     (X:erlaubt, W:Word size, L:Long size, S:Size je nach Datengröße)⓪ ⓪(( 0) Const(Byte,Word)-   L W W W W W W   -    X   X X    W-Konstante⓪(( 1) External        - L L     L     L   -  X     X X    L-Konstante⓪(( 2) Numeric const.  - L L W W S W S S   -  X X   X X    W-Konstante⓪(( 3) Char            -   L W   W   W W   -        X X    W-Konstante⓪(( 4) Enum.Type       -   L W W W     W   -        X X    W-Konstante⓪(( 5) Record-Field    -   L W W W     W   -        X X    W-Konstante⓪(( 6) Glob.Var./Table - L L     L     L   -        X      abs. Pointer⓪(( 7) Glob.Procedure  - L L     L     L   -  X     X      abs. Pointer⓪(( 8) Label           -           W W W   -  X   X X X    rel. Pointer⓪(( 9) Lok.Variable    -   L W W W     W   -        X X    W-Konstante⓪((10) Lok.Procedure   -           W W W   -  X   X X X    rel. Pointer⓪((11) Const(Long)     - L L     L   L L   -  X     X      L-Konstante⓪((12) Real            -                 D -               D-Konstante⓪?^ ^ ^ ^ ^ ^ ^ ^ ^    ^ ^ ^ ^ ^⓪-d32         ------/ | | | | | | | |    | | | | |⓪-#d32        --------/ | | | | | | |    | | | | |⓪-#d16 / #d8  ----------/ | | | | | |    | | | | |⓪-d8/d16(An.. ------------/ | | | | |    | | | | |⓪&68020: bd - An     --------------/ | | | |    | | | | |⓪-d8/d16(PC.. ----------------/ | | |    | | | | |⓪&68020: bd - PC     ------------------/ | |    | | | | |⓪&68020: od          --------------------/ |    | | | | |⓪&68881: #d64        ----------------------/    | | | | |⓪T| | | | |⓪-JMP / JSR                --------------/ | | | |⓪-TRAP / STOP /LINK / BKPT ----------------/ | | |⓪-Bcc / DBcc / BSR         ------------------/ | |⓪-DC.L / MOVE / LEA / PEA / TRAPcc # ----------/ |⓪-DC.W / DC.B              ----------------------/⓪-TRAP / BKPT⓪-PACK / UNPK !!!⓪-TRAPcc !!!⓪!*⓪!* Regel : wenn d8(An/PC,Xn) erlaubt ist, dann sind auch erw. 68020⓪!*        Adr-Arten (..,An/PC..) erlaubt und müssen geprüft werden⓪!*)⓪ PROCEDURE VerifyEA;⓪ BEGIN⓪ ASSEMBLER  MOVE.B  Mode,D0⓪)BEQ     JAER1          ;ERROR: Operand expected⓪)⓪)CMPI.B  #$3F,D0        ; Doppelregs und Bitfields müssen gelöscht sein⓪)BHI     JAER1⓪)⓪)CMPI.B  #2,D0          ;'An' ?⓪)BNE     C1⓪)CMPI.B  #1,SizeOfData  ;'.B' ?⓪)BEQ     AER2           ;ERROR: Byteverarb. bei Adr-Reg. nicht zugel.⓪)⓪ C1       CMPI.B  #9,D0          ; 'd32' / 'd16' ?⓪)BEQ     D32⓪)CMPI.B  #06,D0         ; 'd16(An)' ?⓪)BEQ     INDA⓪)CMPI.B  #07,D0         ; 'd8(An,Rn.X)' ?⓪)BEQ     INDA⓪)CMPI.B  #10,D0         ; 'd16(PC)' ?⓪)BEQ     INDPC⓪)CMPI.B  #11,D0         ; 'd8(PC,Rn.X)' ?⓪)BEQ     INDPC⓪)CMPI.B  #12,D0         ; '#data' ?⓪)BEQ     IMM⓪)RTS⓪ ⓪ JAER1    JMP     AERR1⓪ AER2     JMP     AERR2⓪ ⓪ ; 'd16(An)' / 'd8(An,Rn.X)' / erw. 68020 Adr-Arten mit An als Baseregister⓪ INDA     MOVE.W  #1110111001010%,D3⓪)BTST    #FlgIs20,M20Flg        ; erw. Adr-Art ?⓪)BEQ     IndA2                  ; Nein -> Test f. d8/d16(An.. ausführen⓪)MOVE.W  #1010100000000%,D3      ; bd testen, od braucht nicht !⓪ IndA2    JMP     TestType⓪ ⓪ ; 'd16(PC)' / 'd8(PC,Rn.X)' / erw. 68020 Adr-Arten mit PC als Baseregister⓪ INDPC    MOVE.W  #1101011111010%,D3⓪)BTST    #FlgIs20,M20Flg        ; erw. Adr-Art ?⓪)BEQ     IndPC2                 ; Nein -> Test f. d8/d16(PC.. ausführen⓪)MOVE.W  #1001011110010%,D3      ; bd testen, od braucht nicht !⓪ IndPC2   JMP     TestType⓪ ⓪ ; 'd32'⓪ D32      MOVE.W  #1011100111001%,D3⓪)JMP     TestType⓪ ⓪ ; '#data'⓪ IMM      MOVE.B  SizeOfData,D3⓪)BNE     IMMC2⓪)MOVEQ   #DefltSiz,D3⓪ IMMC2    CMPI.B  #1,D3⓪)BEQ     IMMC1⓪)CMPI.B  #2,D3⓪)BEQ     IMMC1⓪)CMPI.B  #$10,D3⓪)BEQ     IMMC3⓪)CMPI.B  #4,D3⓪)BNE     AER2⓪)MOVE.W  #1010100000000%,D3⓪)JMP     TestType⓪ IMMC1    MOVE.W  #1110111000010%,D3⓪)JMP     TestType⓪ IMMC3    MOVE.W  #0111111111111%,D3⓪)JMP     TestType⓪ END⓪ END VerifyEA;⓪ ⓪ ⓪ PROCEDURE ApndSource;⓪ BEGIN⓪ ASSEMBLER  JSR     SourceToLast⓪)JSR     VerifyEA⓪)JMP     ApndEA⓪ END⓪ END ApndSource;⓪ ⓪ ⓪ PROCEDURE ApndDest;⓪ BEGIN⓪ ASSEMBLER  JSR     DestToLast⓪)JSR     VerifyEA⓪)JMP     ApndEA⓪ END⓪ END ApndDest;⓪ ⓪ ⓪ PROCEDURE ApndThird;⓪ BEGIN⓪ ASSEMBLER  JSR     ThirdToLast⓪)JSR     VerifyEA⓪)JMP     ApndEA⓪ END⓪ END ApndThird;⓪ ⓪ ⓪ PROCEDURE SourceTo0_5;⓪ BEGIN⓪ ASSEMBLER  JSR     SourceToLast⓪+JSR     EATo0_5⓪+JMP     LastToSource⓪ END⓪ END SourceTo0_5;⓪ ⓪ ⓪ PROCEDURE DestTo0_5;⓪ BEGIN⓪ ASSEMBLER  JSR     DestToLast⓪+JSR     EATo0_5⓪+JMP     LastToDest⓪ END⓪ END DestTo0_5;⓪ ⓪ ⓪ PROCEDURE ThirdTo0_5;⓪ BEGIN⓪ ASSEMBLER  JSR     ThirdToLast⓪+JSR     EATo0_5⓪+JMP     LastToThird⓪ END⓪ END ThirdTo0_5;⓪ ⓪ ⓪ (*⓪ *   '#data' als 'd3' nach Bit 9-11 ( v. ADDQ / SUBQ / ASL / ROL / LSL usw. )⓪ *)⓪ PROCEDURE d3To9_11;⓪ BEGIN⓪ ASSEMBLER  MOVE.W  #1111111001010%,D3⓪)JSR     TestTypeSource⓪)MOVE.L  DataSource,D0⓪)CMPI.L  #9,D0⓪)BCS     OK⓪)JMP     AERR2⓪ !OK      ANDI.B  #$7,D0⓪)LSL     #3,D0⓪)LSL     #6,D0⓪)OR      D0,D1⓪ END⓪ END d3To9_11;⓪ ⓪ ⓪ PROCEDURE CheckModeSource;⓪ BEGIN⓪ ASSEMBLER  ; In D0.L müssen alle zugelassenen Modes als Bits übergeben werden⓪)MOVE    D2,-(A7)⓪)MOVE.B  modeSource,D2⓪)BEQ     AER1⓪)BTST    D2,D0⓪)BNE     ok⓪ AER1     JMP     AERR1⓪ ok       MOVE    (A7)+,D2⓪ END⓪ END CheckModeSource;⓪ ⓪ ⓪ PROCEDURE CheckModeDest;⓪ BEGIN⓪ ASSEMBLER  ; In D0.L müssen alle zugelassenen Modes als Bits übergeben werden⓪)MOVE    D2,-(A7)⓪)MOVE.B  modeDest,D2⓪)BEQ     AER1⓪)BTST    D2,D0⓪)BNE     ok⓪ AER1     JMP     AERR1⓪ ok       MOVE    (A7)+,D2⓪ END⓪ END CheckModeDest;⓪ ⓪ ⓪ PROCEDURE CheckModeThird;⓪ BEGIN⓪ ASSEMBLER  ; In D0.L müssen alle zugelassenen Modes als Bits übergeben werden⓪)MOVE    D2,-(A7)⓪)MOVE.B  modeThird,D2⓪)BEQ     AER1⓪)BTST    D2,D0⓪)BNE     ok⓪ AER1     JMP     AERR1⓪ ok       MOVE    (A7)+,D2⓪ END⓪ END CheckModeThird;⓪ ⓪ ⓪ PROCEDURE ErrOnOddAdr;⓪"BEGIN⓪"ASSEMBLER⓪+MOVE.W  A4,D0⓪+BTST    #0,D0⓪+BEQ     OK⓪+JMP     AERR9⓪"OK⓪"END⓪"END ErrOnOddAdr;⓪ ⓪ ⓪ FORWARD ASSM;⓪ ⓪ PROCEDURE NextLine;⓪"BEGIN⓪"ASSEMBLER⓪+JSR     AsmSameSbl⓪+CMPI.W  #35,D3⓪+BEQ     L1⓪+TST     AsmMode        ;Assembler-Option noch Aktiv ?⓪+BEQ     L1             ;nein: SYNC und RTS⓪+JMP     ASSM           ;Ja:naechstes Symbol auswerten⓪"!L1      SF      DoingAsm⓪+JSR     ErrOnOddAdr⓪+JMP     AsmSameSbl⓪"END⓪"END NextLine;⓪ ⓪ ⓪ ⓪ (*⓪ *   PSEUDO OPCODE⓪ *)⓪ PROCEDURE PseudoOp;⓪ BEGIN⓪ ASSEMBLER⓪)CLR.L   D5⓪)CMPI.W  #AS165,D3⓪)BEQ.L   MNBOMB⓪)CMPI.W  #AS157,D3⓪)BEQ     DCOP         ;%DC⓪)CMPI.W  #AS158,D3⓪)BEQ     DSOP         ;%DS⓪);CMPI.W  #AS160,D3⓪);BEQ.L   AEQU        ;%EQU⓪)CMPI.W  #AS161,D3⓪)BEQ.L   AACZ        ;%ACZ⓪)CMPI.W  #AS162,D3⓪)BEQ.L   ASYNC        ;%SYNC⓪)CMPI.W  #AS163,D3⓪)BEQ.L   AASC         ;%ASC⓪);CMPI.W  #AS164,D3⓪);BEQ.L   AACI         ;%ACI⓪)CMPI.W  #AS_STR,D3⓪)BEQ.L   ASTR         ;%STR⓪ AER4     JMP     AERR4⓪ AER2     JMP     AERR2⓪ AER7     JMP     AERR7⓪ AER18    JMP     AERR18       ; String too long⓪ ⓪ !DSOP    JSR     AsmGetSbl⓪)JSR     GetExpr⓪)MOVE.W  DataType,D0⓪)BMI     AER7⓪)ANDI.W  #1001000100101%,D0⓪)BEQ     AER7⓪)MOVE.L  Data,D0⓪)CMPI.L  #$FFFF,D0⓪)BHI     AER2⓪)BRA     DSL1⓪ DSL0     CLR.B   (A4)+⓪ DSL1     DBRA    D0,DSL0⓪)JMP     NEXTLINE⓪ ⓪ !DCOP    JSR     AsmGetSbl⓪)CMP.W   #AS37,D3        ;'.'?⓪)BEQ     OK4⓪)JMP     AERR2⓪ !OK4     JSR     FETNOSP⓪)ANDI.W  #$DF,D2      ;KLEINSCHRIFT WEG⓪)CMP.W   #'D',D2⓪)BEQ.L   DCD⓪)CMP.W   #'L',D2⓪)BEQ.L   DCL⓪)CMP.W   #'W',D2⓪)BEQ     DCW⓪)CMP.W   #'B',D2⓪)BNE     AER4⓪ ⓪ !DCB     MOVE.L  A4,pInstr⓪)CLR     D5⓪)JSR     AsmGetSbl⓪)JSR     GetExpr⓪)MOVE.W  DataType,D3⓪)BTST    #12,D3⓪)BNE     AER2⓪)MOVEQ   #1,D3⓪)JSR     CalcExpr⓪)MOVE.B  D0,(A4)+⓪)JSR     AsmSameSbl⓪)CMPI.W  #AS38,D3⓪)BEQ     DCB           ;DC.B⓪)JMP     NextLine⓪ ⓪ DCW      JSR     ErrOnOddAdr⓪)MOVE.L  A4,pInstr⓪)CLR     D5⓪)JSR     AsmGetSbl⓪)JSR     GetExpr⓪)MOVE.W  DataType,D3⓪)BTST    #12,D3⓪)BNE     AER2⓪)MOVEQ   #2,D3⓪)JSR     CalcExpr⓪)MOVE.W  D0,(A4)+⓪)JSR     AsmSameSbl⓪)CMPI.W  #AS38,D3⓪)BEQ     DCW           ;DC.W⓪)JMP     NextLine⓪ ⓪ DCL      JSR     ErrOnOddAdr    ; DC.L⓪)MOVE.L  A4,pInstr⓪)CLR     D5⓪)JSR     AsmGetSbl⓪)JSR     GetExpr⓪)MOVE.W  DataType,D3⓪)BTST    #12,D3⓪)BNE     AER2⓪)MOVEQ   #4,D3⓪)JSR     CalcExpr⓪)MOVE.L  D0,(A4)+⓪)JSR     AsmSameSbl⓪)CMPI.W  #AS38,D3⓪)BEQ     DCL⓪)JMP     NextLine⓪ ⓪ DCD      JSR     ErrOnOddAdr    ; DC.D⓪)MOVE.L  A4,pInstr⓪)CLR     D5⓪)JSR     AsmGetSbl⓪)JSR     GetExpr⓪)MOVE.W  DataType,D3⓪)BTST    #12,D3⓪)BEQ.L   AER2⓪)MOVEQ   #$10,D3⓪)JSR     CalcExpr⓪)MOVE.L  A0,-(A7)⓪)MOVE.L  D0,A0⓪)MOVE.L  (A0)+,(A4)+⓪)MOVE.L  (A0) ,(A4)+⓪)MOVE.L  (A7)+,A0⓪)JSR     AsmSameSbl⓪)CMPI.W  #AS38,D3⓪)BEQ     DCD⓪)JMP     NextLine⓪ ⓪ AACZ     BSR     GENSTR         ; ACZ⓪)CLR.B   (A4)+⓪)CMPI.W  #AS38,D3       ; ','⓪)BEQ     AACZ⓪)JMP     NextLine⓪)⓪ ASYNC    JSR     AsmGetSbl⓪)JSR     PUT0⓪)JMP     NextLine⓪ ⓪ AASC     BSR     GENSTR⓪)CMPI.W  #AS38,D3       ; ','⓪)BEQ     AASC⓪)JMP     NextLine⓪ ⓪ ASTR     ADDQ.L  #1,A4⓪)MOVE.L  A4,-(A7)⓪ ASTR2    BSR     GENSTR⓪)CMPI.W  #AS38,D3       ; ','⓪)BEQ     ASTR2⓪)MOVE.L  A4,D0⓪)SUB.L   (A7),D0⓪)CMPI.L  #255,D0⓪)BHI     AER18          ; String too long⓪)MOVE.L  (A7)+,A0⓪)MOVE.B  D0,-1(A0)⓪)JMP     NextLine⓪)⓪ GENSTR   JSR     AsmGetSbl⓪)CMPI.W  #STRCONST,D3⓪)BNE     GenStr2⓪ GenStr0  MOVE    StrLen,D0⓪)LEA     STRBUF,A0⓪)BRA     GenSt⓪ GENLP    MOVE.B  (A0)+,(A4)+⓪ GenSt    DBRA    D0,GenLp⓪)JMP     AsmGetSbl⓪ GenStr2  JSR     ConFact⓪)MOVE.W  -2(A1,D2.L),D3⓪)CMPI.B  #3,D3          ; CHAR⓪)BEQ     GenStrS1⓪)CMPI.B  #18,D3         ; Alte Const⓪)BEQ     GenStrS1⓪)CMPI.B  #50,D3         ; Neue Const⓪)BEQ     GenStrS1⓪)CMPI.B  #27,D3         ; String-Const⓪)BEQ     GenStr0⓪)CMPI.B  #31,D3         ; String-Const⓪)BEQ     GenStr0⓪)BRA     AER4⓪ GenStrS1 MOVE.L  Accu,D0⓪)CMPI.L  #$FF,D0⓪)BHI     AER6⓪)MOVE.B  D0,(A4)+⓪)JMP     AsmGetSbl⓪ AER6     JMP     AERR6⓪ ⓪ !MNBOMB  JSR     AsmGetSbl⓪)JSR     GetEA⓪)TST.B   Mode⓪)BEQ     AER1⓪)CMPI    #AS38,D3    ; ','⓪)BEQ     AER1⓪)JSR     PRTSTR⓪)DC.B    37,7,7,13,10⓪)ACZ     '<BOMB>: qualified user expected!'⓪)SYNC⓪)BRA     AER4⓪ ⓪ AER1     JMP     AERR1⓪ END⓪ END PseudoOp;⓪ ⓪ ⓪ (*⓪ *   LABEL DEKLARATION, ALLE VORWAERTSREFERENZEN EINTRAGEN⓪ *)⓪ PROCEDURE LabelDecl;⓪ BEGIN⓪ ASSEMBLER⓪)TST.L   -6(A1,D2.L)⓪)BEQ     OK⓪)JMP     AERR12         ;Label bereits declariert⓪ !OK      MOVE.L  pInstr,-6(A1,D2.L) ;Adr.d.Labels⓪)MOVE.L  CodeStart,D0⓪)SUB.L   D0,-6(A1,D2.L) ;Rel.Adr. eintragen⓪)⓪)MOVE.L  -10(A1,D2.L),A0 ;^ auf Word-Offset-Kette⓪)CMPA.L  #0,A0⓪)BEQ     E0⓪)⓪ L1       MOVE.W  (A0),D0⓪)MOVE.L  pInstr,D1⓪)SUB.L   A0,D1⓪)CMPI.L  #$8000,D1⓪)BCS     C1⓪)CMPI.L  #$FFFF8000,D1⓪)BCC     C1⓪)JMP     AERR3          ;ERROR:'Branch too long'⓪ C1       MOVE.W  D1,(A0)⓪)⓪)ADDA.W  D0,A0⓪)TST.W   D0⓪)BNE     L1⓪)⓪ E0       MOVE.L  -14(A1,D2.L),A0 ;^ auf Byte-Offset-Kette⓪)CMPA.L  #0,A0⓪)BEQ     E1⓪)⓪ L2       MOVE.B  (A0),D0⓪)MOVE.L  pInstr,D1⓪)SUB.L   A0,D1⓪)⓪)BTST    #7,D0          ;Ist Bit 7 im Verkettungs-^ gesetzt ?⓪)BEQ     C3⓪)⓪)SUBQ.L  #1,D1          ;ja:'Bcc',Displacement wieder um 1 erniedrigen⓪)BNE     C4             ;Offset # 0 : OK⓪)⓪)JMP     AERR11         ;ERROR: 'Bcc.S' mit Offset = 0⓪ ⓪ C3       ADDQ.L  #1,D1          ;nein: Displacement noch um 1 erhoehen⓪ ⓪ C4       CMPI.L  #$80,D1⓪)BCS     C2⓪)CMPI.L  #$FFFFFF80,D1⓪)BCC     C2⓪)JMP     AERR3          ;ERROR:'Branch too long'⓪ C2       MOVE.B  D1,(A0)⓪)⓪)ORI.B   #$80,D0⓪)EXT.W   D0⓪)ADDA.W  D0,A0⓪)ANDI.B  #$7F,D0⓪)TST.B   D0⓪)BNE     L2⓪ ⓪ E1⓪ END⓪ END LabelDecl;⓪ ⓪ ⓪ (*⓪ *   ID DEFINITION⓪ *)⓪ PROCEDURE LABELEXP;⓪ BEGIN⓪ ASSEMBLER⓪)JSR     AsmSameSbl⓪)TST.W   D3             ; TEST NOCHMAL,OB AUF SYMBOL REFERIERT⓪)BEQ     ZERO           ; NEIN:SYMBOL NOCH UNBEKANNT⓪)BPL     AER10          ; MODULA-WORT ->⓪)CMPI    #LabelID,D3⓪)BNE     ZERO⓪)JSR     LabelDecl      ; ID BEREITS BEKANNT -> FORWARD REF.⓪)BRA     c0⓪ ⓪ !AER10   JMP     AERR10⓪ ⓪ !ZERO    JSR     NewLabel⓪)MOVE.L  pInstr,-6(A1,D2.L) ; akt. Adr. dem Label zuweisen⓪)MOVE.L  CodeStart,D0⓪)SUB.L   D0,-6(A1,D2.L) ;Rel.Adr. eintragen⓪ c0       CMPI.B  #':',(A2)⓪)BNE     c1⓪)ADDQ.L  #1,A2          ; Ja -> überspringen⓪ c1       JSR     AsmGetSbl⓪)JMP     NextLine⓪ END⓪ END LABELEXP;⓪ ⓪ ⓪ PROCEDURE MneCodeTab;⓪ BEGIN⓪ ASSEMBLER  DC.L     1100000100000000%⓪)DC.L     1000000100000000%⓪)DC.L     1101000100000000%⓪)DC.L     1001000100000000%⓪)DC.L     1101000000000000%⓪)DC.L     1100000000000000%⓪)DC.L     1000000000000000%⓪)DC.L     1001000000000000%⓪)DC.L     1101000000000000%⓪)DC.L     1011000000000000%⓪)DC.L     1001000000000000%⓪)DC.L     0000000001000000%⓪)DC.L     0000011000000000%⓪)DC.L     0000110000000000%⓪)DC.L     0000010000000000%⓪)DC.L     0000001000000000%⓪)DC.L     0000101000000000%⓪)DC.L     0000000000000000%⓪)DC.L     0101000000000000%⓪)DC.L     0101000100000000%⓪)DC.L     1110000100000000%     ;%ASL⓪)DC.L     1110000000000000%     ;%ASR⓪)DC.L     1110001100001000%     ;%LSL⓪)DC.L     1110001000001000%     ;%LSR⓪)DC.L     1110011100011000%     ;%ROL⓪)DC.L     1110011000011000%     ;%ROR⓪)DC.L     1110010100010000%     ;%ROXL⓪)DC.L     1110010000010000%     ;%ROXR⓪)DC.L     0110010000000000%⓪)DC.L     0110010100000000%⓪)DC.L     0110011100000000%⓪)DC.L     0110110000000000%⓪)DC.L     0110111000000000%⓪)DC.L     0110001000000000%⓪)DC.L     0110111100000000%⓪)DC.L     0110001100000000%⓪)DC.L     0110110100000000%⓪)DC.L     0110101100000000%⓪)DC.L     0110011000000000%⓪)DC.L     0110101000000000%⓪)DC.L     0110100000000000%⓪)DC.L     0110100100000000%⓪)DC.L     0110000000000000%⓪)DC.L     0110000100000000%⓪)DC.L     0000000101000000%⓪)DC.L     0000000110000000%⓪)DC.L     0000000111000000%⓪)DC.L     0000000100000000%⓪)DC.L     0100000110000000%⓪)DC.L     1100000111000000%⓪)DC.L     1100000011000000%⓪)DC.L     1000000111000000%⓪)DC.L     1000000011000000%⓪)DC.L     0100001000000000%⓪)DC.L     0100010000000000%⓪)DC.L     0100000000000000%⓪)DC.L     0100011000000000%⓪)DC.L     0100101000000000%⓪)DC.L     1011000000000000%⓪)DC.L     1011000100001000%⓪)DC.L     0101010011001000%     ;%DBCC⓪)DC.L     0101010111001000%⓪)DC.L     0101011111001000%⓪)DC.L     0101000111001000%     ;%DBF⓪)DC.L     0101000111001000%⓪)DC.L     0101110011001000%⓪)DC.L     0101111011001000%⓪)DC.L     0101001011001000%⓪)DC.L     0101111011001000%⓪)DC.L     0101001111001000%⓪)DC.L     0101110111001000%⓪)DC.L     0101101111001000%⓪)DC.L     0101011011001000%⓪)DC.L     0101101011001000%⓪)DC.L     0101000011001000%⓪)DC.L     0101100011001000%⓪)DC.L     0101100111001000%⓪)DC.L     1011000000000000%⓪)DC.L     1100000100000000%⓪)DC.L     0100100010000000%     ;%EXT⓪)DC.L     0100111011000000%⓪)DC.L     0100111010000000%⓪)DC.L     0100100001000000%⓪)DC.L     0100000111000000%⓪)DC.L     0100111001010000%⓪)DC.L     0000000000000000%⓪)DC.L     0100100010000000%⓪)DC.L     0000000000001000%⓪)DC.L     0111000000000000%⓪)DC.L     0100100000000000%⓪)DC.L     0101010011000000%⓪)DC.L     0101010111000000%⓪)DC.L     0101011111000000%⓪)DC.L     0101000111000000%⓪)DC.L     0101110011000000%⓪)DC.L     0101111011000000%⓪)DC.L     0101001011000000%⓪)DC.L     0101111111000000%⓪)DC.L     0101001111000000%⓪)DC.L     0101110111000000%⓪)DC.L     0101101111000000%⓪)DC.L     0101011011000000%⓪)DC.L     0101101011000000%⓪)DC.L     0101000011000000%⓪)DC.L     0101100011000000%⓪)DC.L     0101100111000000%⓪)DC.L     0100101011000000%⓪)DC.L     0100111001110001%⓪)DC.L     0100111001110011%⓪)DC.L     0100111001110101%     ;%RTS⓪)DC.L     0100111001110110%⓪)DC.L     0100111001110000%⓪)DC.L     0100111001110010%⓪)DC.L     0100100001000000%⓪)DC.L     0100111001000000%⓪)DC.L     0100111001011000%⓪)DC.L     0100111001110111%⓪)DC.L     0101000111001000%     ;%DBRA (DBF)⓪)DC.L     $4AFC                 ;%ILLEGAL⓪)DC.L     $4AFC                 ;%BREAK⓪)DC.L     $4E7A                 ;%MOVEC⓪)DC.L     $4E74                 ;%RTD⓪)⓪ (*$ ? Asm20:⓪); Erweiterungen seit 3.3a / 1.8.86 f. 68020⓪)DC.L     1110101011000000%     ;%BFCHG⓪)DC.L     1110110011000000%     ;%BFCLR⓪)DC.L     1110101111000000%     ;%BFEXTS⓪)DC.L     1110100111000000%     ;%BFEXTU⓪)DC.L     1110110111000000%     ;%BFFFO⓪)DC.L     1110111111000000%     ;%BFINS⓪)DC.L     1110111011000000%     ;%BFSET⓪)DC.L     1110100011000000%     ;%BFTST⓪)DC.L     0100100001001000%     ;%BKPT⓪)DC.L     0000011011000000%     ;%CALLM⓪)DC.L     0000100011000000%     ;%CAS⓪)DC.L     0000100011111100%     ;%CAS2⓪)DC.L     0000000011000000%     ;%CHK2⓪)DC.L     0000000011000000%     ;%CMP2⓪)DC.L     1000000111000000%     ;%DIVSL Worte für DIVS.W bzw DIVU.W⓪)DC.L     1000000011000000%     ;%DIVUL da in Mn-routien umgesetzt⓪'; DC.L     0100110001000000%     ;%DIVSL ???⓪'; DC.L     0100110001000000%     ;%DIVUL ???⓪)DC.L     0100100111000000%     ;%EXTB⓪)DC.L     0000111000000000%     ;%MOVES⓪)DC.L     1000000101000000%     ;%PACK⓪)DC.L     0000011011000000%     ;%RTM⓪)DC.L     0101010011111000%     ;%TRAPCC⓪)DC.L     0101010111111000%     ;%TRAPCS⓪)DC.L     0101011111111000%     ;%TRAPEQ⓪)DC.L     0101000111111000%     ;%TRAPF⓪)DC.L     0101110011111000%     ;%TRAPGE⓪)DC.L     0101111011111000%     ;%TRAPGT⓪)DC.L     0101001011111000%     ;%TRAPHI⓪)DC.L     0101111111111000%     ;%TRAPLE⓪)DC.L     0101001111111000%     ;%TRAPLS⓪)DC.L     0101110111111000%     ;%TRAPLT⓪)DC.L     0101101111111000%     ;%TRAPMI⓪)DC.L     0101011011111000%     ;%TRAPNE⓪)DC.L     0101101011111000%     ;%TRAPPL⓪)DC.L     0101000011111000%     ;%TRAPT⓪)DC.L     0101100011111000%     ;%TRAPVC⓪)DC.L     0101100111111000%     ;%TRAPVS⓪)DC.L     1000000110000000%     ;%UNPK⓪)⓪); Erweiterung für 68881⓪)DC.L   00000000000000001111001000000000%     ;%FMOVE⓪)DC.L   01011100000000001111001000000000%     ;%FMOVECR⓪)DC.L   10000000000000001111001000000000%     ;%FMOVEM⓪)DC.L   00000000000000001111001101000000%     ;%FRESTORE⓪)DC.L   00000000000000001111001100000000%     ;%FSAVE⓪)DC.L   00000000000000001111001010000000%     ;%FNOP⓪)DC.L   00000000001110101111001000000000%     ;%FTST⓪)DC.L   00000000000000001111001010000001%     ;%FBEQ⓪)DC.L   00000000000000001111001010000000%     ;%FBF⓪)DC.L   00000000000000001111001010010011%     ;%FBGE⓪)DC.L   00000000000000001111001010010110%     ;%FBGL⓪)DC.L   00000000000000001111001010010111%     ;%FBGLE⓪)DC.L   00000000000000001111001010010010%     ;%FBGT⓪)DC.L   00000000000000001111001010010101%     ;%FBLE⓪)DC.L   00000000000000001111001010010100%     ;%FBLT⓪)DC.L   00000000000000001111001010001110%     ;%FBNE⓪)DC.L   00000000000000001111001010011100%     ;%FBNGE⓪)DC.L   00000000000000001111001010011001%     ;%FBNGL⓪)DC.L   00000000000000001111001010011000%     ;%FBNGLE⓪)DC.L   00000000000000001111001010011101%     ;%FBNGT⓪)DC.L   00000000000000001111001010011010%     ;%FBNLE⓪)DC.L   00000000000000001111001010011011%     ;%FBNLT⓪)DC.L   00000000000000001111001010010001%     ;%FBSEQ⓪)DC.L   00000000000000001111001010010000%     ;%FBSF⓪)DC.L   00000000000000001111001010011110%     ;%FBSNE⓪)DC.L   00000000000000001111001010011111%     ;%FBST⓪)DC.L   00000000000000001111001010000011%     ;%FBOGE⓪)DC.L   00000000000000001111001010000110%     ;%FBOGL⓪)DC.L   00000000000000001111001010000010%     ;%FBOGT⓪)DC.L   00000000000000001111001010000101%     ;%FBOLE⓪)DC.L   00000000000000001111001010000100%     ;%FBOLT⓪)DC.L   00000000000000001111001010000111%     ;%FBOR⓪)DC.L   00000000000000001111001010001111%     ;%FBT⓪)DC.L   00000000000000001111001010001011%     ;%FBUGE⓪)DC.L   00000000000000001111001010001001%     ;%FBUEQ⓪)DC.L   00000000000000001111001010001000%     ;%FBUN⓪)DC.L   00000000000000001111001010001010%     ;%FBUGT⓪)DC.L   00000000000000001111001010001101%     ;%FBULE⓪)DC.L   00000000000000001111001010001100%     ;%FBULT⓪)DC.L   00000000000000011111001001001000%     ;%FDBEQ⓪)DC.L   00000000000000001111001001001000%     ;%FDBF⓪)DC.L   00000000000100111111001001001000%     ;%FDBGE⓪)DC.L   00000000000101101111001001001000%     ;%FDBGL⓪)DC.L   00000000000101111111001001001000%     ;%FDBGLE⓪)DC.L   00000000000100101111001001001000%     ;%FDBGT⓪)DC.L   00000000000101011111001001001000%     ;%FDBLE⓪)DC.L   00000000000101001111001001001000%     ;%FDBLT⓪)DC.L   00000000000011101111001001001000%     ;%FDBNE⓪)DC.L   00000000000111001111001001001000%     ;%FDBNGE⓪)DC.L   00000000000110011111001001001000%     ;%FDBNGL⓪)DC.L   00000000000110001111001001001000%     ;%FDBNGLE⓪)DC.L   00000000000111011111001001001000%     ;%FDBNGT⓪)DC.L   00000000000110101111001001001000%     ;%FDBNLE⓪)DC.L   00000000000110111111001001001000%     ;%FDBNLT⓪)DC.L   00000000000100011111001001001000%     ;%FDBSEQ⓪)DC.L   00000000000100001111001001001000%     ;%FDBSF⓪)DC.L   00000000000111101111001001001000%     ;%FDBSNE⓪)DC.L   00000000000111111111001001001000%     ;%FDBST⓪)DC.L   00000000000000111111001001001000%     ;%FDBOGE⓪)DC.L   00000000000001101111001001001000%     ;%FDBOGL⓪)DC.L   00000000000000101111001001001000%     ;%FDBOGT⓪)DC.L   00000000000001011111001001001000%     ;%FDBOLE⓪)DC.L   00000000000001001111001001001000%     ;%FDBOLT⓪)DC.L   00000000000001111111001001001000%     ;%FDBOR⓪)DC.L   00000000000011111111001001001000%     ;%FDBT⓪)DC.L   00000000000010111111001001001000%     ;%FDBUGE⓪)DC.L   00000000000010011111001001001000%     ;%FDBUEQ⓪)DC.L   00000000000010001111001001001000%     ;%FDBUN⓪)DC.L   00000000000010101111001001001000%     ;%FDBUGT⓪)DC.L   00000000000011011111001001001000%     ;%FDBULE⓪)DC.L   00000000000011001111001001001000%     ;%FDBULT⓪)DC.L   00000000000000011111001001000000%     ;%FSEQ⓪)DC.L   00000000000000001111001001000000%     ;%FSF⓪)DC.L   00000000000100111111001001000000%     ;%FSGE⓪)DC.L   00000000000101101111001001000000%     ;%FSGL⓪)DC.L   00000000000101111111001001000000%     ;%FSGLE⓪)DC.L   00000000000100101111001001000000%     ;%FSGT⓪)DC.L   00000000000101011111001001000000%     ;%FSLE⓪)DC.L   00000000000101001111001001000000%     ;%FSLT⓪)DC.L   00000000000011101111001001000000%     ;%FSNE⓪)DC.L   00000000000111001111001001000000%     ;%FSNGE⓪)DC.L   00000000000110011111001001000000%     ;%FSNGL⓪)DC.L   00000000000110001111001001000000%     ;%FSNGLE⓪)DC.L   00000000000111011111001001000000%     ;%FSNGT⓪)DC.L   00000000000110101111001001000000%     ;%FSNLE⓪)DC.L   00000000000110111111001001000000%     ;%FSNLT⓪)DC.L   00000000000100011111001001000000%     ;%FSSEQ⓪)DC.L   00000000000100001111001001000000%     ;%FSSF⓪)DC.L   00000000000111101111001001000000%     ;%FSSNE⓪)DC.L   00000000000111111111001001000000%     ;%FSST⓪)DC.L   00000000000000111111001001000000%     ;%FSOGE⓪)DC.L   00000000000001101111001001000000%     ;%FSOGL⓪)DC.L   00000000000000101111001001000000%     ;%FSOGT⓪)DC.L   00000000000001011111001001000000%     ;%FSOLE⓪)DC.L   00000000000001001111001001000000%     ;%FSOLT⓪)DC.L   00000000000001111111001001000000%     ;%FSOR⓪)DC.L   00000000000011111111001001000000%     ;%FST⓪)DC.L   00000000000010111111001001000000%     ;%FSUGE⓪)DC.L   00000000000010011111001001000000%     ;%FSUEQ⓪)DC.L   00000000000010001111001001000000%     ;%FSUN⓪)DC.L   00000000000010101111001001000000%     ;%FSUGT⓪)DC.L   00000000000011011111001001000000%     ;%FSULE⓪)DC.L   00000000000011001111001001000000%     ;%FSULT⓪)DC.L   00000000000000011111001001111000%     ;%FTRAPEQ⓪)DC.L   00000000000000001111001001111000%     ;%FTRAPF⓪)DC.L   00000000000100111111001001111000%     ;%FTRAPGE⓪)DC.L   00000000000101101111001001111000%     ;%FTRAPGL⓪)DC.L   00000000000101111111001001111000%     ;%FTRAPGLE⓪)DC.L   00000000000100101111001001111000%     ;%FTRAPGT⓪)DC.L   00000000000101011111001001111000%     ;%FTRAPLE⓪)DC.L   00000000000101001111001001111000%     ;%FTRAPLT⓪)DC.L   00000000000011101111001001111000%     ;%FTRAPNE⓪)DC.L   00000000000111001111001001111000%     ;%FTRAPNGE⓪)DC.L   00000000000110011111001001111000%     ;%FTRAPNGL⓪)DC.L   00000000000110001111001001111000%     ;%FTRAPNGLE⓪)DC.L   00000000000111011111001001111000%     ;%FTRAPNGT⓪)DC.L   00000000000110101111001001111000%     ;%FTRAPNLE⓪)DC.L   00000000000110111111001001111000%     ;%FTRAPNLT⓪)DC.L   00000000000100011111001001111000%     ;%FTRAPSEQ⓪)DC.L   00000000000100001111001001111000%     ;%FTRAPSF⓪)DC.L   00000000000111101111001001111000%     ;%FTRAPSNE⓪)DC.L   00000000000111111111001001111000%     ;%FTRAPST⓪)DC.L   00000000000000111111001001111000%     ;%FTRAPOGE⓪)DC.L   00000000000001101111001001111000%     ;%FTRAPOGL⓪)DC.L   00000000000000101111001001111000%     ;%FTRAPOGT⓪)DC.L   00000000000001011111001001111000%     ;%FTRAPOLE⓪)DC.L   00000000000001001111001001111000%     ;%FTRAPOLT⓪)DC.L   00000000000001111111001001111000%     ;%FTRAPOR⓪)DC.L   00000000000011111111001001111000%     ;%FTRAPT⓪)DC.L   00000000000010111111001001111000%     ;%FTRAPUGE⓪)DC.L   00000000000010011111001001111000%     ;%FTRAPUEQ⓪)DC.L   00000000000010001111001001111000%     ;%FTRAPUN⓪)DC.L   00000000000010101111001001111000%     ;%FTRAPUGT⓪)DC.L   00000000000011011111001001111000%     ;%FTRAPULE⓪)DC.L   00000000000011001111001001111000%     ;%FTRAPULT⓪)DC.L   00000000001000101111001000000000%     ;%FADD⓪)DC.L   00000000001110001111001000000000%     ;%FCMP⓪)DC.L   00000000001000001111001000000000%     ;%FDIV⓪)DC.L   00000000001000011111001000000000%     ;%FMOD⓪)DC.L   00000000001000111111001000000000%     ;%FMUL⓪)DC.L   00000000001001011111001000000000%     ;%FREM⓪)DC.L   00000000001001101111001000000000%     ;%FSCALE⓪)DC.L   00000000001001001111001000000000%     ;%FSGLDIV⓪)DC.L   00000000001001111111001000000000%     ;%FSGLMUL⓪)DC.L   00000000001010001111001000000000%     ;%FSUB⓪)DC.L   00000000000110001111001000000000%     ;%FABS⓪)DC.L   00000000000111001111001000000000%     ;%FACOS⓪)DC.L   00000000000011001111001000000000%     ;%FASIN⓪)DC.L   00000000000010101111001000000000%     ;%FATAN⓪)DC.L   00000000000011011111001000000000%     ;%FATANH⓪)DC.L   00000000000111011111001000000000%     ;%FCOS⓪)DC.L   00000000000110011111001000000000%     ;%FCOSH⓪)DC.L   00000000000100001111001000000000%     ;%FETOX⓪)DC.L   00000000000010001111001000000000%     ;%FETOXM1⓪)DC.L   00000000000111101111001000000000%     ;%FGETEXP⓪)DC.L   00000000000111111111001000000000%     ;%FGETMAN⓪)DC.L   00000000000000011111001000000000%     ;%FINT⓪)DC.L   00000000000000111111001000000000%     ;%FINTRZ⓪)DC.L   00000000000101001111001000000000%     ;%FLOGN⓪)DC.L   00000000000001101111001000000000%     ;%FLOGNP1⓪)DC.L   00000000000101011111001000000000%     ;%FLOG10⓪)DC.L   00000000000101101111001000000000%     ;%FLOG2⓪)DC.L   00000000000110101111001000000000%     ;%FNEG⓪)DC.L   00000000000011101111001000000000%     ;%FSIN⓪)DC.L   00000000000000101111001000000000%     ;%FSINH⓪)DC.L   00000000000001001111001000000000%     ;%FSQRT⓪)DC.L   00000000000011111111001000000000%     ;%FTAN⓪)DC.L   00000000000010011111001000000000%     ;%FTANH⓪)DC.L   00000000000100101111001000000000%     ;%FTENTOX⓪)DC.L   00000000000100011111001000000000%     ;%FTWOTOX⓪)DC.L   00000000001100001111001000000000%     ;%FSINCOS⓪ *)⓪ END⓪ END MneCodeTab;⓪ ⓪ ⓪ PROCEDURE MneArgTab;⓪ BEGIN⓪ ASSEMBLER  DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0     ;%DBCC⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0     ;%DBF⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0     ;%EXT⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0     ;%RTS⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0⓪)DC.B 0     ;%DBRA (DBF)⓪)DC.B 0     ;%ILLEGAL⓪)DC.B 0     ;%BREAK⓪)DC.B 0     ;%MOVEC⓪)DC.B 0     ;%RTD⓪ ⓪ (*$ ? Asm20:⓪); Erweiterungen seit 3.3a / 1.8.86 f. 68020⓪)DC.B 0     ;%BFCHG⓪)DC.B 0     ;%BFCLR⓪)DC.B 0     ;%BFEXTS⓪)DC.B 0     ;%BFEXTU⓪)DC.B 0     ;%BFFFO⓪)DC.B 0     ;%BFINS⓪)DC.B 0     ;%BFSET⓪)DC.B 0     ;%BFTST⓪)DC.B 0     ;%BKPT⓪)DC.B 0     ;%CALLM⓪)DC.B 3     ;%CAS⓪)DC.B 3     ;%CAS2⓪)DC.B 0     ;%CHK2⓪)DC.B 0     ;%CMP2⓪)DC.B 0     ;%DIVSL⓪)DC.B 0     ;%DIVUL⓪)DC.B 0     ;%EXTB⓪)DC.B 0     ;%MOVES⓪)DC.B 3     ;%PACK⓪)DC.B 0     ;%RTM⓪)DC.B 0     ;%TRAPCC⓪)DC.B 0     ;%TRAPCS⓪)DC.B 0     ;%TRAPEQ⓪)DC.B 0     ;%TRAPF⓪)DC.B 0     ;%TRAPGE⓪)DC.B 0     ;%TRAPGT⓪)DC.B 0     ;%TRAPHI⓪)DC.B 0     ;%TRAPLE⓪)DC.B 0     ;%TRAPLS⓪)DC.B 0     ;%TRAPLT⓪)DC.B 0     ;%TRAPMI⓪)DC.B 0     ;%TRAPNE⓪)DC.B 0     ;%TRAPPL⓪)DC.B 0     ;%TRAPT⓪)DC.B 0     ;%TRAPVC⓪)DC.B 0     ;%TRAPVS⓪)DC.B 3     ;%UNPK⓪)⓪ ; Erweiterung für 68881⓪)DC.B 0     ;%FMOVE               ; Umspeichern⓪)DC.B 0     ;%FMOVECR⓪)DC.B 0     ;%FMOVEM⓪)DC.B 0     ;%FRESTORE⓪)DC.B 0     ;%FSAVE⓪)DC.B 0     ;%FNOP⓪)DC.B 0     ;%FTST⓪)DC.B 0     ;%FBEQ                ; Controls⓪)DC.B 0     ;%FBF⓪)DC.B 0     ;%FBGE⓪)DC.B 0     ;%FBGL⓪)DC.B 0     ;%FBGLE⓪)DC.B 0     ;%FBGT⓪)DC.B 0     ;%FBLE⓪)DC.B 0     ;%FBLT⓪)DC.B 0     ;%FBNE⓪)DC.B 0     ;%FBNGE⓪)DC.B 0     ;%FBNGL⓪)DC.B 0     ;%FBNGLE⓪)DC.B 0     ;%FBNGT⓪)DC.B 0     ;%FBNLE⓪)DC.B 0     ;%FBNLT⓪)DC.B 0     ;%FBSEQ⓪)DC.B 0     ;%FBSF⓪)DC.B 0     ;%FBSNE⓪)DC.B 0     ;%FBST⓪)DC.B 0     ;%FBOGE⓪)DC.B 0     ;%FBOGL⓪)DC.B 0     ;%FBOGT⓪)DC.B 0     ;%FBOLE⓪)DC.B 0     ;%FBOLT⓪)DC.B 0     ;%FBOR⓪)DC.B 0     ;%FBT⓪)DC.B 0     ;%FBUGE⓪)DC.B 0     ;%FBUEQ⓪)DC.B 0     ;%FBUN⓪)DC.B 0     ;%FBUGT⓪)DC.B 0     ;%FBULE⓪)DC.B 0     ;%FBULT⓪)DC.B 0     ;%FDBEQ⓪)DC.B 0     ;%FDBF⓪)DC.B 0     ;%FDBGE⓪)DC.B 0     ;%FDBGL⓪)DC.B 0     ;%FDBGLE⓪)DC.B 0     ;%FDBGT⓪)DC.B 0     ;%FDBLE⓪)DC.B 0     ;%FDBLT⓪)DC.B 0     ;%FDBNE⓪)DC.B 0     ;%FDBNGE⓪)DC.B 0     ;%FDBNGL⓪)DC.B 0     ;%FDBNGLE⓪)DC.B 0     ;%FDBNGT⓪)DC.B 0     ;%FDBNLE⓪)DC.B 0     ;%FDBNLT⓪)DC.B 0     ;%FDBSEQ⓪)DC.B 0     ;%FDBSF⓪)DC.B 0     ;%FDBSNE⓪)DC.B 0     ;%FDBST⓪)DC.B 0     ;%FDBOGE⓪)DC.B 0     ;%FDBOGL⓪)DC.B 0     ;%FDBOGT⓪)DC.B 0     ;%FDBOLE⓪)DC.B 0     ;%FDBOLT⓪)DC.B 0     ;%FDBOR⓪)DC.B 0     ;%FDBT⓪)DC.B 0     ;%FDBUGE⓪)DC.B 0     ;%FDBUEQ⓪)DC.B 0     ;%FDBUN⓪)DC.B 0     ;%FDBUGT⓪)DC.B 0     ;%FDBULE⓪)DC.B 0     ;%FDBULT⓪)DC.B 0     ;%FSEQ⓪)DC.B 0     ;%FSF⓪)DC.B 0     ;%FSGE⓪)DC.B 0     ;%FSGL⓪)DC.B 0     ;%FSGLE⓪)DC.B 0     ;%FSGT⓪)DC.B 0     ;%FSLE⓪)DC.B 0     ;%FSLT⓪)DC.B 0     ;%FSNE⓪)DC.B 0     ;%FSNGE⓪)DC.B 0     ;%FSNGL⓪)DC.B 0     ;%FSNGLE⓪)DC.B 0     ;%FSNGT⓪)DC.B 0     ;%FSNLE⓪)DC.B 0     ;%FSNLT⓪)DC.B 0     ;%FSSEQ⓪)DC.B 0     ;%FSSF⓪)DC.B 0     ;%FSSNE⓪)DC.B 0     ;%FSST⓪)DC.B 0     ;%FSOGE⓪)DC.B 0     ;%FSOGL⓪)DC.B 0     ;%FSOGT⓪)DC.B 0     ;%FSOLE⓪)DC.B 0     ;%FSOLT⓪)DC.B 0     ;%FSOR⓪)DC.B 0     ;%FST⓪)DC.B 0     ;%FSUGE⓪)DC.B 0     ;%FSUEQ⓪)DC.B 0     ;%FSUN⓪)DC.B 0     ;%FSUGT⓪)DC.B 0     ;%FSULE⓪)DC.B 0     ;%FSULT⓪)DC.B 0     ;%FTRAPEQ⓪)DC.B 0     ;%FTRAPF⓪)DC.B 0     ;%FTRAPGE⓪)DC.B 0     ;%FTRAPGL⓪)DC.B 0     ;%FTRAPGLE⓪)DC.B 0     ;%FTRAPGT⓪)DC.B 0     ;%FTRAPLE⓪)DC.B 0     ;%FTRAPLT⓪)DC.B 0     ;%FTRAPNE⓪)DC.B 0     ;%FTRAPNGE⓪)DC.B 0     ;%FTRAPNGL⓪)DC.B 0     ;%FTRAPNGLE⓪)DC.B 0     ;%FTRAPNGT⓪)DC.B 0     ;%FTRAPNLE⓪)DC.B 0     ;%FTRAPNLT⓪)DC.B 0     ;%FTRAPSEQ⓪)DC.B 0     ;%FTRAPSF⓪)DC.B 0     ;%FTRAPSNE⓪)DC.B 0     ;%FTRAPST⓪)DC.B 0     ;%FTRAPOGE⓪)DC.B 0     ;%FTRAPOGL⓪)DC.B 0     ;%FTRAPOGT⓪)DC.B 0     ;%FTRAPOLE⓪)DC.B 0     ;%FTRAPOLT⓪)DC.B 0     ;%FTRAPOR⓪)DC.B 0     ;%FTRAPT⓪)DC.B 0     ;%FTRAPUGE⓪)DC.B 0     ;%FTRAPUEQ⓪)DC.B 0     ;%FTRAPUN⓪)DC.B 0     ;%FTRAPUGT⓪)DC.B 0     ;%FTRAPULE⓪)DC.B 0     ;%FTRAPULT⓪)DC.B 0     ;%FADD                ; Dyadic Operations⓪)DC.B 0     ;%FCMP⓪)DC.B 0     ;%FDIV⓪)DC.B 0     ;%FMOD⓪)DC.B 0     ;%FMUL⓪)DC.B 0     ;%FREM⓪)DC.B 0     ;%FSCALE⓪)DC.B 0     ;%FSGLDIV⓪)DC.B 0     ;%FSGLMUL⓪)DC.B 0     ;%FSUB⓪)DC.B 0     ;%FABS                ; Monidic Operations⓪)DC.B 0     ;%FACOS⓪)DC.B 0     ;%FASIN⓪)DC.B 0     ;%FATAN⓪)DC.B 0     ;%FATANH⓪)DC.B 0     ;%FCOS⓪)DC.B 0     ;%FCOSH⓪)DC.B 0     ;%FETOX⓪)DC.B 0     ;%FETOXM1⓪)DC.B 0     ;%FGETEXP⓪)DC.B 0     ;%FGETMAN⓪)DC.B 0     ;%FINT⓪)DC.B 0     ;%FINTRZ⓪)DC.B 0     ;%FLOGN⓪)DC.B 0     ;%FLOGNP1⓪)DC.B 0     ;%FLOG10⓪)DC.B 0     ;%FLOG2⓪)DC.B 0     ;%FNEG⓪)DC.B 0     ;%FSIN⓪)DC.B 0     ;%FSINH⓪)DC.B 0     ;%FSQRT⓪)DC.B 0     ;%FTAN⓪)DC.B 0     ;%FTANH⓪)DC.B 0     ;%FTENTOX⓪)DC.B 0     ;%FTWOTOX⓪)DC.B 0     ;%FSINCOS             ; Dual Monadic Operation⓪ *)⓪ END⓪ END MneArgTab;⓪ ⓪ ⓪ FORWARD MneJmpTab;⓪ ⓪ ⓪ PROCEDURE ASSM;⓪"BEGIN⓪$ASSEMBLER⓪)MOVE.L  OPTIONS,D2⓪)MOVE.L  D2,AsmOPTIONS⓪)LSR     #1,D2          ;Soll BREAK erfolgen ?⓪)SCS     BreakAgain⓪)BCC     C0             ;nein⓪)LSL     #1,D2⓪)MOVE.L  D2,AsmOPTIONS⓪)MOVE.L  D2,OPTIONS⓪)BREAK⓪ ⓪ C0       CLR     GetLastSbl⓪)⓪);Default-Sprungweite fuer Bcc bestimmen:⓪)MOVE.L  OPTIONS,D0⓪)BTST    #04,D0         ;Test auf Debug-Option⓪)BEQ     C1             ;Nein⓪)MOVE.B  #2,DefltBcc    ; '.W'⓪)BRA     C2⓪ C1       MOVE.B  #1,DefltBcc    ; '.B'⓪ ⓪ C2       MOVE.L  A4,pInstr⓪)MOVE.L  pLastSym,pTxtMne⓪)MOVE.L  pTxtLin,pTxtLin2  ;Zeilenbeginn retten⓪)MOVE.L  TxtLine,TxtLine2  ;Zeilennr. retten⓪)ST      DoingAsm⓪)CLR.B   OprndCnt⓪)⓪)JSR     AsmSameSbl⓪)TST.W   D3⓪)BEQ     JAL1            ;:UNBEKANNTES SYMBOL⓪)BMI     JAL1            ;:AUF LABEL WIRD SCHON REFERIERT⓪)⓪)CMPI    #AS39,D3        ; '!' ? (LABELDECLARATION ?)⓪)BNE     TPSOP           ;NEIN >⓪)⓪)JSR     AsmGetSbl       ;JA⓪ ⓪ !JAL1    JMP     LABELEXP        ;>ID ERWARTET⓪ ⓪ !TPSOP   CMPI    #AS_MneF,D3⓪)BCC     L1⓪ ⓪ AER10    JMP     AERR10        ;SYMBOL = SONDERZEICHEN > ERROR⓪)⓪ !L1      CMPI    #AS_MneL,D3⓪)BLS     L2            ;->Mnemonic⓪)CMPI    #AS_m20F,D3⓪)BCS     PsOp⓪)CMPI    #AS_m20L,D3⓪)BHI     AER10         ;->ERROR⓪)MOVE.L  AsmOptions,D0⓪)BTST    #24,D0⓪)BNE     L1C1⓪)JMP     AERR17         ; '68020 mnemonic not allowed'⓪ L1C1     SUBI    #AS_M20F-AS_MneL-1,D3⓪)BRA     L2             ;->Mnemonic⓪)⓪ psop     JMP     PseudoOp       ;PSEUDO-OP GEFUNDEN⓪ ⓪ (*$ ? Gepard:⓪ AER15    JMP     AERR15         ;Fehlermeldung bei RTE⓪ *)⓪ ⓪ !L2      JSR     ErrOnOddAdr⓪)⓪)SUBI    #AS_MneF,D3    ;D3:=Mnemonic-Nr.⓪)LEA     MneArgTab,A0   ;Tabelle für Anzahl d. Argumente⓪)MOVE.B  0(A0,D3.W),D0⓪)MOVE.B  D0,Args⓪)LSL.L   #2,D3          ;D3:=Mnemonic-Nr. mal 4⓪)LEA     MneCodeTab,A0  ;Anf. Tabelle der Opcodes⓪)⓪)(*$ ? Gepard:⓪+MOVE.L  0(A0,D3.W),D0⓪+CMPI.W  #$4E73,D0      ;Ist Mnemonic = RTE ?⓪+BEQ     AER15          ;Ja:ERROR⓪+MOVE.L  D0,MneSecCode⓪)*)⓪)⓪)(*$ ? Atari:⓪+MOVE.L  0(A0,D3.W),MneSecCode⓪)*)⓪)⓪)LEA     MneJmpTab,A0   ;Anfang der Sprungtabelle⓪)MOVE.L  0(A0,D3.W),D0  ;Sprungvektor des Befehls⓪)CMPI.L  #NoOperandsWZE,D0 ;Test,ob der Befehl Operanden erwartet⓪)BEQ     NOpWZE⓪)CMPI.L  #NoOperands,D0 ;Test,ob der Befehl Operanden erwartet⓪)BNE     WithOprd⓪)⓪)JSR     AsmGetSbl⓪)MOVE.W  MneCode,(A4)+⓪)BRA.L   JRET1          ;kein Operand erwartet,-> zum naechsten Befehl⓪ ⓪ NOpWZE   JSR     AsmGetSbl⓪)MOVE.W  MneCode,(A4)+⓪)CLR.W   (A4)+⓪)BRA.L   JRET1          ;kein Operand erwartet,-> zum naechsten Befehl⓪ ⓪ WithOprd MOVE.L  D0,MneVec      ;rette Sprungvektor fuer Operanden-Auswertung⓪)CLR.L   ModeDest⓪)⓪)MOVEQ   #0,D0⓪)JSR     GetSize⓪)⓪)CLR     ModeSource⓪)CLR     ModeDest⓪)CLR     ModeThird⓪)⓪)JSR     AsmGetSbl⓪)MOVE.L  pLastSym,pTxtOp1⓪)ADDQ.B  #1,OprndCnt⓪)JSR     GetEA⓪)JSR     LastToSource⓪)⓪)JSR     AsmSameSbl⓪)CMPI    #AS38,D3       ; KOMMA ?⓪)BNE     ASSML4⓪)⓪)JSR     AsmGetSbl⓪)MOVE.L  pLastSym,pTxtOp2⓪)ADDQ.B  #1,OprndCnt⓪)JSR     GetEA⓪)JSR     LastToDest⓪)TST.B   ModeDest⓪)BEQ.L   JAER1          ; ERROR: fehlender Operand nach Komma⓪)⓪)CMPI.B  #3,Args⓪)BNE     AssmL4⓪)⓪)JSR     AsmSameSbl⓪)CMPI    #AS38,D3       ; KOMMA ?⓪)BNE.L   JAER1⓪)⓪)JSR     AsmGetSbl⓪)MOVE.L  pLastSym,pTxtOp3⓪)ADDQ.B  #1,OprndCnt⓪)JSR     GetEA⓪)JSR     LastToThird⓪)TST.B   ModeThird⓪)BEQ.L   JAER1          ; ERROR: fehlender Operand nach Komma⓪)⓪ ASSML4   CLR.B   OprndCnt⓪)JSR     SourceToLast⓪)MOVE.L  MneSecCode,D1⓪)ADDQ.L  #2,A4⓪)MOVEA.L MneVec,A0⓪)MOVEQ   #1,D5⓪)TST.B   BreakAgain⓪)BEQ     nobrk2⓪)BREAK⓪ noBrk2   JSR     (A0)⓪)MOVE.L  pInstr,A0⓪)MOVE    D1,(A0)⓪ JRET1    JMP     NextLine⓪ JAER1    JMP     AERR1⓪ END⓪ END ASSM;⓪ ⓪ ⓪ (****************************************************************************⓪0BEGINN DER INDIVIDUELLEN MNEMONIC - AUSWERTUNG⓪ ****************************************************************************)⓪ ⓪ ⓪ PROCEDURE MN31A;⓪ BEGIN⓪ ASSEMBLER  MOVE.B  ModeSource,D0⓪)CMPI.B  #1,D0          ; S: 'Dn' ?⓪)BEQ     MN0A⓪)CMPI.B  #5,D0          ; S: '-(An)' ?⓪)BEQ     OK⓪ !AER1    JMP     AERR1⓪ !OK      MOVE.B  RegSource,D0⓪)JSR     RegTo0_2⓪)MOVE.B  ModeDest,D0⓪)CMPI.B  #5,D0          ; D: '-(An)' ?⓪)BNE     AER1⓪)MOVE.B  RegDest,D0⓪)JSR     RegTo9_11⓪)BSET    #3,D1⓪)RTS⓪ !MN0A    MOVE.B  RegSource,D0⓪)JSR     RegTo0_2⓪)MOVE.B  ModeDest,D0⓪)CMPI.B  #1,D0          ; D: 'Dn' ?⓪)BNE     AER1⓪)MOVE.B  RegDest,D0⓪)JMP     RegTo9_11⓪ END⓪ END MN31A;⓪ ⓪ (*⓪ *  %ADDX, %SUBX⓪ *)⓪ PROCEDURE MN31;⓪ BEGIN⓪ ASSEMBLER  JSR     LoadSize⓪)JSR     SizeTo6_7⓪)JMP     MN31A⓪ END⓪ END MN31;⓪ ⓪ (* %ABCD, %SBCD *)⓪ PROCEDURE MN0;⓪ BEGIN⓪ ASSEMBLER  MOVEQ   #1,D0⓪)JSR     VerifySize⓪)JMP     MN31A⓪ END⓪ END MN0;⓪ ⓪ (*$ ? Asm20:⓪ ⓪ (* %PACK, %UNPK *)⓪ PROCEDURE MnePACK_UNPK;⓪ BEGIN⓪ ASSEMBLER  JSR     ErrIfSize⓪)JSR     MN31A⓪)CMPI.B  #12,ModeThird⓪)BNE     AER1⓪)MOVE.W  #1111111111010%,D3⓪)JSR     TestTypeThird⓪)MOVE.L  DataThird,D0⓪)JMP     ApndD0_W⓪ AER1     JMP     AERR1⓪ END⓪ END MnePACK_UNPK;⓪ ⓪ *)⓪ ⓪ (* %ADD %SUB %AND %OR *)⓪ PROCEDURE MN1;⓪ BEGIN⓪ ASSEMBLER⓪)JSR     LoadSize⓪)JSR     SizeTo6_7⓪)CMPI.B  #1,ModeDest    ;ist Dest. = DataReg ?⓪)BNE     MN1B           ;Nein -> weiter testen⓪)⓪)MOVE.B  RegDest,D0⓪)JSR     RegTo9_11⓪)JSR     SourceTo0_5⓪)JMP     ApndSource⓪ ⓪ AER1     JMP AERR1⓪ ⓪ MN1B     CMPI.B  #1,ModeSource  ;Ist Source = Data.Reg. ?⓪)BNE     AER1           ;Nein ->ERROR⓪)CMPI.B  #2,ModeDest    ;ist Dest. = Adr-Reg.?⓪)BEQ     AER1           ;ja -> ERROR⓪)CMPI.B  #10,ModeDest⓪)BCC     AER1⓪)⓪)MOVE.B  RegSource,D0⓪)JSR     RegTo9_11⓪)BSET    #8,D1⓪)JSR     DestTo0_5⓪)JMP     ApndDest⓪ END⓪ END MN1;⓪ ⓪ (* %ADDA, %SUBA, %CMPA *)⓪ PROCEDURE MN2;⓪ BEGIN⓪ ASSEMBLER  MOVE.B  ModeDest,D0⓪)CMPI.B  #2,D0          ; D: 'An' ?⓪)BEQ     OK1⓪)JMP     AERR1⓪ !OK1     JSR     LoadSize⓪)CMPI.B  #2,D0          ; Size # BYTE ?⓪)BEQ     MN2A⓪)CMPI.B  #4,D0⓪)BEQ     OK⓪)JMP     AERR2⓪ !OK      BSET    #8,D1⓪ MN2A     BSET    #7,D1⓪)BSET    #6,D1⓪)JSR     SourceTo0_5⓪)JSR     ApndSource⓪)MOVE.B  RegDest,D0⓪)JMP     RegTo9_11⓪ END⓪ END MN2;⓪ ⓪ ⓪ PROCEDURE @MN3;⓪ BEGIN⓪ ASSEMBLER  JSR     LoadSize⓪)JSR     SizeTo6_7⓪)CMPI.B  #12,ModeSource   ; S: '#' ?⓪)BEQ     OK1⓪)JMP     AERR1⓪ !OK1     JSR     ApndSource⓪)JSR     DestTo0_5⓪)JMP     ApndDest⓪ END⓪ END @MN3;⓪ ⓪ ⓪ (*⓪ *   %ADDI, %SUBI⓪ *)⓪ PROCEDURE MN3;⓪ BEGIN⓪ ASSEMBLER⓪)MOVE.L  #0001111111010%,D0⓪)JSR     CheckModeDest⓪)JMP     @MN3⓪ END⓪ END MN3;⓪ ⓪ (*⓪ *   %CMPI⓪ *)⓪ PROCEDURE MneCMPI;⓪ BEGIN⓪ ASSEMBLER⓪)MOVE.L  #0001111111010%,D0⓪)MOVE.L  AsmOptions,D2⓪)BTST    #24,D2⓪)BEQ     ok0⓪)ORI.L   #0110000000000%,D0     ; 68020 kann auch PC-rel.⓪ ok0      JSR     CheckModeDest⓪)JMP     @MN3⓪ END⓪ END MneCMPI;⓪ ⓪ (*⓪ * %ANDI, %EORI, %ORI⓪ *)⓪ PROCEDURE MN4;⓪ BEGIN⓪ ASSEMBLER  MOVE.B  ModeDest,D0⓪)CMPI.B  #13,D0         ;'SR' ?⓪)BEQ     C2⓪)CMPI.B  #15,D0         ;'CCR' ?⓪)BEQ     C1⓪)JMP     MN3            ;weiter wie ADDI,CMPI,SUBI⓪ C1       MOVEQ   #1,D0          ; CCR : BYTE-Operation⓪)BRA     C3⓪ C2       MOVEQ   #2,D0          ; SR : WORD-Operation⓪ C3       JSR     VerifySize⓪)MOVE.B  D0,SizeOfData⓪)JMP     @MN3⓪ END⓪ END MN4;⓪ ⓪ (*⓪ *   %ADDQ, %SUBQ⓪ *)⓪ PROCEDURE MN5;⓪ BEGIN⓪ ASSEMBLER  CMPI.B  #12,ModeSource⓪)BEQ     OK⓪ !AER1    JMP     AERR1⓪ !OK      JSR     LoadSize⓪)JSR     SizeTo6_7⓪)JSR     d3To9_11       ; # - Konstante eintragen in D1⓪@; Hier erfolgt auch Pruefung der Datengroesse⓪)MOVE.B  ModeDest,D0⓪)CMPI.B  #10,D0⓪)BCC     AER1⓪)JSR     DestTo0_5⓪)JMP     ApndDest⓪ END⓪ END MN5;⓪ ⓪ (*⓪ *   %ASL, %ASR, %LSL, %LSR, %ROL, %ROR, %ROXL, %ROXR⓪ *)⓪ PROCEDURE MN6;⓪ BEGIN⓪ ASSEMBLER  JSR     LoadSize⓪)JSR     SizeTo6_7⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #1,D0          ; S: 'Dn' ?⓪)BEQ     MN6A⓪)CMPI.B  #12,D0         ; S: '#' ?⓪)BNE     MN6B⓪)⓪); '#d3,Dn'⓪)ANDI.W  #$F1FF,D1⓪)MOVE.W  #1111111101010%,D3⓪)JSR     TestTypeSource⓪)JSR     d3To9_11       ; # - Konstante eintragen in D1⓪@; Hier erfolgt auch Pruefung der Datengroesse⓪)MOVE.B  ModeDest,D0⓪)CMPI.B  #1,D0          ; D: 'Dn' ?⓪)BEQ     OK⓪ !AER1    JMP     AERR1⓪ !OK      MOVE.B  RegDest,D0⓪)JMP     RegTo0_2⓪ ⓪ MN6A     ; 'Dn,Dn'⓪)ANDI.W  #$F1FF,D1⓪)BSET    #5,D1⓪)MOVE.B  RegSource,D0⓪)JSR     RegTo9_11⓪)MOVE.B  ModeDest,D0⓪)CMPI.B  #1,D0          ; S: 'Dn' ?⓪)BNE     AER1⓪)MOVE.B  RegDest,D0⓪)JMP     RegTo0_2⓪ ⓪ AER2     JMP     AERR2⓪ ⓪ MN6B     ; '<ea>'⓪)CMPI.B  #10,D0⓪)BCC     AER1⓪)CMPI.B  #2,D0          ; S: 'An' ?⓪)BEQ     AER1⓪)JSR     LoadSize⓪)CMPI.B  #2,D0          ; nur WORD ist erlaubt⓪)BNE     AER2⓪)ANDI.W  #$FFC0,D1⓪)BSET    #6,D1⓪)BSET    #7,D1⓪)MOVE.W  #1010010011001%,D3⓪)JSR     TestTypeSource⓪)JSR     SourceTo0_5⓪)JSR     ApndSource⓪)JMP     ErrIfOp2⓪ END⓪ END MN6;⓪ ⓪ ⓪ (*⓪ *   Hauptroutine fuer Bcc und DBcc⓪ *)⓪ PROCEDURE @MN7A;⓪ BEGIN⓪ ASSEMBLER  MOVE.W  DataType,D3⓪)BMI.L   C1             ;undefined Label / lokal Proc.⓪)⓪)MOVE.L  Data,D0⓪)BTST    #8,D3⓪)BNE     C2             ;lok. Label⓪)BTST    #10,D3         ;lok. Proc.⓪)BEQ     AER5           ;ERROR:label expected⓪)⓪ C2       ADD.L   CodeStart,D0⓪)MOVE.L  pInstr,D2⓪)ADD.L   D5,D2          ; Achtung: normalerweise wird hier 2 addiert,⓪)ADD.L   D5,D2          ; bei FDBcc wird 4 addiert !!⓪)⓪ C8       SUB.L   D2,D0⓪)⓪)CMPI.L  #$8000,D0⓪)BCS     C3⓪)CMPI.L  #$FFFF8000,D0⓪)BCC     C3⓪)⓪ AER3     JMP     AERR3⓪ AER5     JMP     AERR5⓪ AER2     JMP     AERR2⓪ ⓪ C3       CMPI.L  #$80,D0⓪)BCS     C4⓪)CMPI.L  #$FFFFFF80,D0⓪)BCC     C4⓪)⓪)TST.B   SizeOfData⓪)BEQ     C5⓪)CMPI.B  #8,SizeOfData  ; '.S'⓪)BHI     AER2⓪)BEQ     AER3⓪)CMPI.B  #1,SizeOfData  ; '.B'⓪)BEQ     AER3⓪ ⓪ C5       JMP     ApndD0_W⓪ ⓪ C4       TST.B   SizeOfData⓪)BEQ     C9⓪)CMPI.B  #4,SizeOfData  ; '.L'⓪)BEQ     C5⓪)CMPI.B  #2,SizeOfData  ; '.W'⓪)BEQ     C5⓪)CMPI.B  #8,SizeOfData  ; '.S'⓪)BEQ     C9⓪)CMPI.B  #1,SizeOfData  ; '.B'⓪)BNE     AER2⓪ C9       MOVE.B  D0,D1⓪)RTS⓪ ⓪ ; Forward Ref. to Label / lokal Proc.⓪ C1       BTST    #10,D3         ;lok. Proc.?⓪)BNE     C7⓪)BTST    #08,D3         ;undefined Label ?⓪)BEQ     AER5⓪)⓪ ;Forw.Ref to Label⓪)TST.B   SizeOfData⓪)BNE     C10⓪)MOVE.B  DefltBcc,SizeOfData⓪ C10      CMPI.B  #1,SizeOfData  ; '.B'⓪)BEQ     C11⓪)CMPI.B  #8,SizeOfData  ; '.S'⓪)BEQ     C11⓪)BHI     AER2⓪); Long-Bcc⓪)MOVEA.L IDPtr,A0⓪)SUBQ.L  #4,A0⓪)BRA     C12⓪)⓪); Short-Bcc⓪ C11      MOVEA.L IDPtr,A0⓪)SUBQ.L  #8,A0⓪)⓪)MOVEQ   #1,D2⓪)MOVE.L  (A0),D0        ;Word-Verkettungspointer merken⓪)BNE     C14⓪)⓪)ADD.L   pInstr,D2⓪)MOVE.L  D2,(A0)        ;momentane Adresse als ^ eintragen⓪)BSET    #7,D0⓪)MOVE.B  D0,D1⓪)RTS⓪)⓪ ;Forw.Ref to lokal Proc.⓪ C7       CMPI.B  #8,SizeOfData  ; '.S'⓪)BHI     AER2⓪)BEQ     AER3⓪)CMPI.B  #1,SizeOfData  ; '.B'⓪)BEQ     AER3⓪)⓪)MOVE.B  #2,SizeOfData  ; '.W' als Default⓪)⓪)MOVEA.L IDPtr,A0⓪)⓪ C12      MOVE.L  D5,D2          ; Achtung: normalerweise wird hier 2 addiert,⓪)ADD.L   D5,D2          ; bei FDBcc wird 4 addiert !!⓪ ⓪ C13      MOVE.L  (A0),D0        ;Word-Verkettungspointer merken⓪ C14      ADD.L   pInstr,D2⓪)MOVE.L  D2,(A0)        ;momentane Adresse als ^ eintragen⓪)⓪)TST.L   D0⓪)BEQ     C3             ;1.Ref. -> Null als Verkettungspointer⓪)BRA     C8             ;Sonst: Wort-Verkettungs-^ bestimmen⓪ END⓪ END @MN7A;⓪ ⓪ ⓪ (*⓪ *   %Bcc⓪ *)⓪ PROCEDURE MN7;⓪ BEGIN⓪ ASSEMBLER  JSR     ErrIfOp2⓪)JSR     SourceToLast⓪)JMP     @MN7A⓪ END⓪ END MN7;⓪ ⓪ ⓪ (*⓪ *  %DBcc⓪ *)⓪ PROCEDURE MN14;⓪ BEGIN⓪ ASSEMBLER  MOVE.B  ModeSource,D0⓪)CMPI.B  #1,D0          ;Source = 'Dn' ?⓪)BEQ     OK⓪)JMP     AERR1          ;nein:ERROR⓪ !OK      MOVEQ   #2,D0⓪)JSR     VerifySize⓪)MOVE.B  D0,SizeOfData  ; '.W' als Default⓪)MOVE.B  RegSource,D0⓪)JSR     RegTo0_2       ;setze Reg. in Code-Wort⓪)JSR     DestToLast⓪)JMP     @MN7A⓪ END⓪ END MN14;⓪ ⓪ ⓪ (* #d8,<ea>  ausser : #8,Dn  *)⓪ PROCEDURE MN9A;⓪ BEGIN⓪ ASSEMBLER  MOVE.W  #1111111101010%,D3⓪)JSR     TestTypeSource⓪)MOVEQ   #1,D0⓪)JSR     VerifySize⓪)MOVE.L  DataSource,D0⓪)CMPI.L  #8,D0⓪)BCS     OK⓪)JMP     AERR1⓪ !OK      JSR     ApndD0_W⓪)JSR     DestTo0_5⓪)JMP     ApndDest⓪ END⓪ END MN9A;⓪ ⓪ (* #d8,Dn *)⓪ PROCEDURE MN8B;⓪ BEGIN⓪ ASSEMBLER  MOVE.W  #1111111101010%,D3⓪)JSR     TestTypeSource⓪)MOVEQ   #4,D0⓪)JSR     VerifySize⓪)MOVE.L  DataSource,D0⓪)CMPI.L  #32,D0⓪)BCS     OK⓪)JMP     AERR1⓪ !OK      JSR     ApndD0_W⓪)JSR     DestTo0_5⓪)JMP     ApndDest⓪ END⓪ END MN8B;⓪ ⓪ ⓪ PROCEDURE MN9C;⓪ BEGIN⓪ ASSEMBLER  CMPI.B  #1,D0          ;Dest = 'Dn' ?⓪)BNE     L1⓪)JMP     MN8B⓪ !L1      JMP     MN9A⓪ END⓪ END MN9C;⓪ ⓪ ⓪ (* Dn,<ea> *)⓪ PROCEDURE MN9B;⓪ BEGIN⓪ ASSEMBLER  MOVE.B  ModeDest,D0⓪)CMPI.B  #13,D0⓪)BCS     OK⓪ !AER1    JMP     AERR1⓪ !AER2    JMP     AERR2⓪ !OK      CMPI.B  #2,D0          ; D: 'An' ?⓪)BEQ     AER1⓪)CMPI.B  #1,D0          ; D: 'Dn' ?⓪)BNE     C1⓪)⓪)MOVEQ   #4,D0          ; Size muss .L sein⓪)BRA     C3⓪)⓪ C1       MOVEQ   #1,D0          ; Size muss .B sein⓪ ⓪ C3       JSR     VerifySize⓪)JSR     DestTo0_5⓪)JSR     ApndDest⓪)MOVE.B  RegSource,D0⓪)JMP     RegTo9_11⓪ END⓪ END MN9B;⓪ ⓪ ⓪ PROCEDURE MN8A;⓪ BEGIN⓪ ASSEMBLER  MOVE.B  ModeDest,D0⓪)CMPI.B  #10,D0⓪)BCS     OK⓪)JMP     AERR1⓪ !OK      JMP     MN9B⓪ END⓪ END MN8A;⓪ ⓪ ⓪ (*⓪ *   %BCHG, %BCLR, %BSET⓪ *)⓪ PROCEDURE MN8;⓪ BEGIN⓪ ASSEMBLER  MOVE.B  ModeSource,D0⓪)CMPI.B  #1,D0⓪)BNE     L1⓪)JMP     MN8A           ; Dn,<ea>⓪ !L1      CMPI.B  #12,D0⓪)BEQ     OK⓪ !AER1    JMP     AERR1⓪ !OK      BSET    #11,D1         ; #d8,<ea>⓪)BCLR    #8,D1⓪)MOVE.B  ModeDest,D0⓪)CMPI.B  #10,D0⓪)BCC     AER1⓪)CMPI.B  #2,D0⓪)BEQ     AER1⓪)JMP     MN9C⓪ END⓪ END MN8;⓪*⓪ (*⓪ *  %BTST⓪ *)⓪ PROCEDURE MN9;⓪ BEGIN⓪ ASSEMBLER  MOVE.B  ModeSource,D0⓪)CMPI.B  #1,D0          ; S:'Dn' ?⓪)BNE     L1⓪)JMP     MN9B⓪ !L1      CMPI.B  #12,D0         ; S:'#' ?⓪)BEQ     OK1⓪)JMP     AERR1⓪ !OK1     BSET    #11,D1⓪)BCLR    #8,D1⓪)MOVE.B  ModeDest,D0⓪)CMPI.B  #12,D0⓪)BCS     OK⓪)JMP     AERR1⓪ !OK      JMP     MN9C⓪ END⓪ END MN9;⓪ ⓪ ⓪ (*⓪ *  %MULS, %MULU, %DIVS, %DIVU⓪ *)⓪ PROCEDURE MN10;⓪ BEGIN⓪ ASSEMBLER  JSR     LoadSize⓪)CMPI.B  #2,D0⓪)BEQ     okW⓪)CMPI.B  #4,D0⓪)BEQ     okL⓪)⓪ !AER2    JMP     AERR2⓪ !AER1    JMP     AERR1⓪ ⓪ okW      MOVE.L  #1111011111010%,D0⓪)JSR     CheckModeSource⓪)JSR     SourceTo0_5⓪)JSR     ApndSource⓪)MOVE.B  ModeDest,D0⓪)CMPI.B  #1,D0          ; D: 'Dn' ?⓪)BNE     AER1⓪)MOVE.B  RegDest,D0⓪)JMP     RegTo9_11⓪ ⓪ okL      ; 68020 - Behandlung⓪)MOVE.L  AsmOptions,D2⓪)BTST    #24,D2⓪)BEQ     AER2⓪)⓪)CLR     D2                     ; Erw-Wort bei 68020 long form⓪)BTST    #8,D1⓪)BEQ     c0⓪)BSET    #11,D2⓪ c0       MOVE    #0100110000000000%,D3  ; Long form of instruction⓪)BTST    #14,D1⓪)BNE     c2⓪)BSET    #6,D3⓪ c2       MOVE    D3,D1⓪)⓪)MOVE.B  ModeDest,D0⓪)ANDI    #$7F,D0⓪)CMPI.B  #1,D0          ; D: 'Dn' ?⓪)BNE     AER1⓪)⓪); Dp - reg. bestimmen⓪)MOVE.B  RegDest,D0⓪)ROR.W   #4,D0          ; oberes Byte des Wortes schon Null⓪@; ??? soll die vorige Zeile dasein ?⓪)OR      D0,D2⓪)⓪)TST.B   ModeDest⓪)BPL     NoDouble⓪)⓪); Doppelregs nur bei Adr-Arten mit Dn erlaubt⓪)CMPI.B  #1,Mode2Dest  ; Dn ?⓪)BNE     AER1⓪)OR.B    Reg2Dest,D2⓪)BSET    #10,D2         ; Sz - field: 64 bit operation⓪)⓪ NoDouble MOVE.L  #1111011111010%,D0⓪)JSR     CheckModeSource⓪)MOVE    D2,D0⓪)JSR     ApndD0_W⓪)JSR     SourceTo0_5⓪)JMP     ApndSource⓪ END⓪ END MN10;⓪ ⓪ ⓪ (*⓪ *   %DIVSL, %DIVUL⓪ *)⓪ ⓪ (*$ ? Asm20:⓪ ⓪ PROCEDURE MneDIVSL_UL;⓪ BEGIN⓪ ASSEMBLER  JSR     LoadSize⓪)CMPI.B  #4,D0⓪)BEQ     okL⓪)⓪ !AER2    JMP     AERR2⓪ !AER1    JMP     AERR1⓪ ⓪ okL      ; 68020 - Behandlung⓪)MOVE.L  Options,D2⓪)BTST    #24,D2                 ;$X⓪)BEQ     AER2⓪)⓪)CLR     D2                     ; Erw-Wort bei 68020 long form⓪)BTST    #8,D1⓪)BEQ     c0⓪)BSET    #11,D2⓪ c0       MOVE    #0100110001000000%,D1  ; Long form of instruction⓪)⓪)MOVE.B  ModeDest,D0⓪)ANDI    #$7F,D0⓪)CMPI.B  #1,D0          ; D: 'Dn' ?⓪)BNE     AER1⓪)⓪); Dp - reg. bestimmen⓪)MOVE.B  RegDest,D0⓪)OR      D0,D2⓪)⓪)TST.B   ModeDest⓪)BPL     AER1⓪)⓪); Doppelregs nur bei Adr-Arten mit Dn erlaubt⓪)CMPI.B  #1,Mode2Dest  ; Dn ?⓪)BNE     AER1⓪)MOVE.B  Reg2Dest,D0⓪)CMP.B   RegDest,D0⓪)BEQ     AER1⓪)⓪)ROR.W   #4,D0          ; oberes Byte des Wortes schon Null⓪)OR      D0,D2⓪)MOVE.L  #1111011111010%,D0⓪)JSR     CheckModeSource⓪)MOVE    D2,D0⓪)JSR     ApndD0_W⓪)JSR     SourceTo0_5⓪)JMP     ApndSource⓪ END⓪ END MneDIVSL_UL;⓪ *)⓪ ⓪ (*⓪ *  %CHK⓪ *)⓪ PROCEDURE MneCHK;⓪ BEGIN⓪ ASSEMBLER  JSR     LoadSize⓪)CMPI.B  #2,D0⓪)BEQ     OK0⓪)MOVE.L  AsmOptions,D2⓪)BTST    #24,D2⓪)BEQ     AER2⓪)BCLR    #7,D1          ; Size auf Long⓪)CMPI.B  #4,D0⓪)BEQ     OK0⓪ AER2     JMP     AERR2⓪ OK0      MOVE.B  ModeSource,D0⓪)CMPI.B  #2,D0          ; S: 'An' ?⓪)BNE     OK⓪ !AER1    JMP     AERR1⓪ !OK      CMPI.B  #13,D0⓪)BCC     AER1⓪)JSR     SourceTo0_5⓪)JSR     ApndSource⓪)MOVE.B  ModeDest,D0⓪)CMPI.B  #1,D0          ; D: 'Dn' ?⓪)BNE     AER1⓪)MOVE.B  RegDest,D0⓪)JMP     RegTo9_11⓪ END⓪ END MneCHK;⓪)⓪ (*$ ? Asm20:⓪ ⓪ (*⓪!*  %CHK2, %CMP2⓪!*)⓪ PROCEDURE MneCHK2_CMP2;⓪ BEGIN⓪ ASSEMBLER  JSR     LoadSize⓪)JSR     SizeTo9_10⓪)MOVE.L  #0000000000110%,D0⓪)JSR     CheckModeDest⓪)CLR.W   D0⓪)MOVE.B  RegDest,D0⓪)ROR.W   #4,D0⓪)BSET    #11,D0⓪)CMPI.B  #1,ModeDest⓪)BEQ     ok⓪)BSET    #15,D0⓪ ok       JSR     ApndD0_W⓪)MOVE.L  #0111011001000%,D0⓪)JSR     CheckModeSource⓪)JSR     SourceTo0_5⓪)JMP     ApndSource⓪ END⓪ END MneCHK2_CMP2;⓪ ⓪ *)⓪ ⓪ (*⓪ *   %CLR, %NEG, %NEGX, %NOT⓪ *)⓪ PROCEDURE MN11;⓪ BEGIN⓪ ASSEMBLER  JSR     LoadSize⓪)JSR     SizeTo6_7⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #10,D0⓪)BCS     OK⓪ !AER1    JMP     AERR1⓪ !OK      CMPI.B  #2,D0⓪)BEQ     AER1⓪)JSR     SourceTo0_5⓪)JSR     ApndSource⓪)JMP     ErrIfOp2⓪ END⓪ END MN11;⓪ ⓪ ⓪ (*⓪ *   %TST⓪ *)⓪ PROCEDURE MneTST;⓪ BEGIN⓪ ASSEMBLER  JSR     LoadSize⓪)JSR     SizeTo6_7⓪)MOVE.L  #0001111111010%,D0⓪)MOVE.L  AsmOptions,D2⓪)BTST    #24,D2⓪)BEQ     ok0⓪)ORI.L   #0110000000000%,D0     ; 68020 kann auch PC-rel.⓪ ok0      JSR     CheckModeSource⓪)JSR     SourceTo0_5⓪)JSR     ApndSource⓪)JMP     ErrIfOp2⓪ END⓪ END MneTST;⓪ ⓪ (*$ ? Asm20:⓪ ⓪ (*⓪ *   %RTM⓪ *)⓪ PROCEDURE MneRTM;⓪ BEGIN⓪ ASSEMBLER  JSR     ErrIfSize⓪)MOVE.L  #0000000000110%,D0⓪)JSR     CheckModeSource⓪)JSR     SourceTo0_5⓪)JMP     ErrIfOp2⓪ END⓪ END MneRTM;⓪ ⓪ *)⓪ ⓪ (*⓪ *   %CMP⓪ *)⓪ PROCEDURE MN12;⓪ BEGIN⓪ ASSEMBLER  MOVE.B  ModeDest,D0⓪)CMPI.B  #1,D0          ; D: 'Dn' ?⓪)BEQ     OK⓪ !AER1    JMP     AERR1⓪ !OK      MOVE.B  RegDest,D0⓪)JSR     RegTo9_11⓪)JSR     LoadSize⓪)JSR     SizeTo6_7⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #13,D0⓪)BCC     AER1⓪)JSR     SourceTo0_5⓪)JMP     ApndSource⓪ END⓪ END MN12;⓪ ⓪ (*⓪ *   %CMPM⓪ *)⓪ PROCEDURE MN13;⓪ BEGIN⓪ ASSEMBLER  JSR     LoadSize⓪)JSR     SizeTo6_7⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #4,D0          ; S: '(An)+' ?⓪)BEQ     OK⓪ !AER1    JMP     AERR1⓪ !OK      MOVE.B  RegSource,D0⓪)JSR     RegTo0_2⓪)MOVE.B  ModeDest,D0⓪)CMPI.B  #4,D0          ; D: '(An)+' ?⓪)BNE     AER1⓪)MOVE.B  RegDest,D0⓪)JMP     RegTo9_11⓪ END⓪ END MN13;⓪ ⓪ ⓪ (*⓪ *   %EOR⓪ *)⓪ PROCEDURE MN15;⓪ BEGIN⓪ ASSEMBLER⓪)BSET    #8,D1⓪)JSR     LoadSize⓪)JSR     SizeTo6_7⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #1,D0⓪)BEQ     OK⓪ !AER1    JMP     AERR1⓪ !OK      MOVE.B  RegSource,D0⓪)JSR     RegTo9_11⓪)MOVE.B  ModeDest,D0⓪)CMPI.B  #10,D0⓪)BCC     AER1⓪)CMPI.B  #2,D0⓪)BEQ     AER1⓪)JSR     DestTo0_5⓪)JMP     ApndDest⓪ END⓪ END MN15;⓪ ⓪ ⓪ (*⓪ *   %EXG⓪ *)⓪ PROCEDURE MN16;⓪ BEGIN⓪ ASSEMBLER  MOVEQ   #4,D0⓪)JSR     VerifySize⓪)MOVE.B  RegSource,D0⓪)MOVE.B  ModeSource,D4⓪)CMPI.B  #1,D4⓪)BEQ     MN16A⓪)CMPI.B  #2,D4⓪)BEQ     OK⓪ !AER1    JMP     AERR1⓪ !AER2    JMP     AERR2⓪ ⓪ !OK      JSR     RegTo0_2⓪)MOVE.B  RegDest,D0⓪)JSR     RegTo9_11⓪)MOVE.B  ModeDest,D4⓪)CMPI.B  #1,D4⓪)BEQ     MN16B⓪)CMPI.B  #2,D4⓪)BNE     AER1⓪)BSET    #6,D1⓪)BSET    #3,D1⓪)RTS⓪ ⓪ MN16B    BSET    #7,D1⓪)BSET    #3,D1⓪)RTS⓪ ⓪ MN16A    JSR     RegTo9_11⓪)MOVE.B  RegDest,D0⓪)JSR     RegTo0_2⓪)MOVE.B  ModeDest,D0⓪)CMPI.B  #1,D0⓪)BEQ     MN16C⓪)CMPI.B  #2,D0⓪)BEQ     MN16B⓪)BRA     AER1⓪ ⓪ MN16C    BSET    #6,D1⓪ END⓪ END MN16;⓪ ⓪ ⓪ (*⓪ *   %EXT, %EXTB⓪ *)⓪ PROCEDURE MneEXT;⓪ BEGIN⓪ ASSEMBLER  JSR     LoadSize⓪)CMPI.B  #1,D0⓪)BEQ     AER1⓪)CMPI.B  #2,D0⓪)BEQ     ADR9B⓪)BSET    #6,D1⓪ ADR9B    MOVE.B  ModeSource,D0⓪)CMPI.B  #1,D0⓪)BNE     AER1⓪)MOVE.B  RegSource,D0⓪)JSR     RegTo0_2⓪)JMP     ErrIfOp2⓪ AER1     JMP     AERR1⓪ END⓪ END MneEXT;⓪ ⓪ ⓪ (*⓪ *   %CAS⓪ *)⓪ PROCEDURE MneCAS;⓪ BEGIN⓪ ASSEMBLER  JSR     LoadSize⓪)JSR     Size2To9_10⓪)JSR     ThirdTo0_5⓪)CMPI.B  #1,ModeSource⓪)BNE     AER1⓪)CMPI.B  #1,ModeDest⓪)BNE     AER1⓪)CLR     D0⓪)MOVE.B  RegSource,D0⓪)CLR     D2⓪)MOVE.B  RegDest,D2⓪)LSL     #6,D2⓪)OR      D2,D0⓪)JSR     ApndD0_W⓪)MOVE.L  #0001011111000%,D0⓪)JSR     CheckModeThird⓪)JMP     ApndThird⓪)⓪ AER1     JMP     AERR1⓪ END⓪ END MneCAS;⓪ ⓪ (*$ ? Asm20:⓪ ⓪ (*⓪ *   %CAS2⓪ *)⓪ PROCEDURE MneCAS2;⓪ BEGIN⓪ ASSEMBLER  JSR     LoadSize⓪)CMPI.B  #1,D0⓪)BEQ     AER2⓪)JSR     Size2To9_10⓪)CMPI.B  #$81,ModeSource⓪)BEQ     ok0⓪ AER1     JMP     AERR1⓪ AER2     JMP     AERR2⓪ ok0      CMPI.B  #1,Mode2Source⓪)BNE     AER1⓪)CMPI.B  #$81,ModeDest⓪)BNE     AER1⓪)CMPI.B  #1,Mode2Dest⓪)BNE     AER1⓪)MOVE.B  ModeThird,D0⓪)CMPI.B  #$83,D0        ; '(An) ?⓪)BEQ     ok1⓪)CMPI.B  #17+$80,D0     ; '(Dn) ?⓪)BNE     AER1⓪ ok1      MOVE.B  Mode2Third,D0⓪)CMPI.B  #3,D0          ; '(An) ?⓪)BEQ     ok2⓪)CMPI.B  #17,D0         ; '(Dn) ?⓪)BNE     AER1⓪)⓪ ok2      CLR     D0⓪)MOVE.B  RegSource,D0⓪)CLR     D2⓪)MOVE.B  RegDest,D2⓪)LSL     #6,D2⓪)OR      D2,D0⓪)CLR     D2⓪)MOVE.B  RegThird,D2⓪)ROR     #4,D2⓪)CMPI.B  #$80+3,ModeThird   ; '(An)' ?⓪)BNE     ok3⓪)BSET    #15,D2⓪ ok3      OR      D2,D0⓪)JSR     ApndD0_W⓪)⓪)CLR     D0⓪)MOVE.B  Reg2Source,D0⓪)CLR     D2⓪)MOVE.B  Reg2Dest,D2⓪)LSL     #6,D2⓪)OR      D2,D0⓪)CLR     D2⓪)MOVE.B  Reg2Third,D2⓪)ROR     #4,D2⓪)CMPI.B  #3,Mode2Third   ; '(An)' ?⓪)BNE     ok4⓪)BSET    #15,D2⓪ ok4      OR      D2,D0⓪)JMP     ApndD0_W⓪ END⓪ END MneCAS2;⓪ ⓪ *)⓪ ⓪ PROCEDURE @MN19A;⓪ BEGIN⓪ ASSEMBLER  JSR     ErrIfSize⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #12,D0⓪)BCS     OK⓪ !AER1    JMP     AERR1⓪ !OK      CMPI.B  #5,D0⓪)BEQ     AER1⓪)CMPI.B  #4,D0⓪)BEQ     AER1⓪)CMPI.B  #2,D0⓪)BLS     AER1⓪)JSR     SourceTo0_5⓪)JMP     ApndSource⓪ END⓪ END @MN19A;⓪ ⓪ (*⓪ *   %JSR,%JMP⓪ *)⓪ PROCEDURE MN18;⓪ BEGIN⓪ ASSEMBLER⓪(JSR     ErrIfOp2⓪(MOVE.W  #1000000111001%,D3⓪(JSR     TestTypeSource⓪(JMP     @MN19A⓪ END⓪ END MN18;⓪ ⓪ ⓪ (*⓪ *   %PEA⓪ *)⓪ PROCEDURE MN18P;⓪ BEGIN⓪ ASSEMBLER  JSR     ErrIfOp2⓪ (*$ ? Gepard:⓪)CMPI.B  #3,ModeSource⓪)BCS     ok1⓪)CMPI.B  #7,ModeSource⓪)BHI     ok1⓪); Operand ist (An), x(An), -(An), (An)+ oder x(An,Xn.S)⓪)CMPI.B  #3,RegSource   ; A3 ?⓪)BNE     ok1⓪)MOVE.W  #asmIllAM,D2   ;ja-> Warning ausgeben⓪)MOVEQ   #1,D3          ;source-Operand⓪)JSR     AsmWarning⓪ *)⓪ ok1      JMP     @MN19A⓪ END⓪ END MN18P;⓪ ⓪ ⓪ (*⓪ *   %LEA⓪ *)⓪ PROCEDURE MN19;⓪ BEGIN⓪ ASSEMBLER  JSR     ErrIfSize⓪ (*$ ? Gepard:⓪)MOVE.W  #asmIllAM,D2   ;Warning ausgeben⓪)CMPI.B  #3,ModeSource⓪)BCS     ok1⓪)CMPI.B  #7,ModeSource⓪)BHI     ok1⓪); Operand ist (An), x(An), -(An), (An)+ oder x(An,Xn.S)⓪)CMPI.B  #3,RegSource   ; source = (A3) ?⓪)BNE     ok1⓪)CMPI.B  #3,RegDest     ; dest = A3 ?⓪)BEQ     ok2            ; LEA x(A3...),A3 ist erlaubt⓪)MOVEQ   #1,D3          ;source-Operand⓪)JSR     AsmWarning⓪)BRA     ok2⓪ ok1      CMPI.B  #3,RegDest     ; dest = A3 ?⓪)BNE     ok2            ; LEA xx,A3 ist nicht erlaubt⓪)MOVEQ   #2,D3          ; dest-Operand⓪)JSR     AsmWarning⓪ *)⓪ ok2      MOVE.B  ModeDest,D0⓪)CMPI.B  #2,D0⓪)BEQ     OK⓪)JMP     AERR1⓪ !OK      MOVE.B  RegDest,D0⓪)JSR     RegTo9_11⓪)JMP     @MN19A⓪ END⓪ END MN19;⓪ ⓪ ⓪ (*⓪ *  %LINK⓪ *)⓪ PROCEDURE MN20;⓪ BEGIN⓪ ASSEMBLER  MOVE.W  #1111111111010%,D3⓪)JSR     TestTypeSource⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #2,D0⓪)BEQ     OK⓪ !AER1    JMP     AERR1⓪ !OK      MOVE.B  ModeDest,D0⓪)CMPI.B  #12,D0⓪)BNE     AER1⓪)JSR     LoadSize⓪)CMPI.B  #2,D0⓪)BEQ     okw⓪)CMPI.B  #4,D0⓪)BEQ     okl⓪)JMP     AERR2⓪ okl      MOVE    #0100100000001000%,D1  ; LINK.L - instruction⓪)MOVE.L  DataDest,D0⓪)JSR     ApndD0_L⓪)BRA     C2⓪ okw      MOVE.L  DataDest,D0⓪)CMPI.L  #$8000,D0⓪)BCS     C1⓪)CMPI.L  #$FFFF8000,D0⓪)BCC     C1⓪)JMP     AERR16⓪ C1       JSR     ApndD0_W⓪ C2       MOVE.B  RegSource,D0⓪)JMP     RegTo0_2⓪ END⓪ END MN20;⓪ ⓪ ⓪ (*$ ? Asm20:⓪ ⓪ (*⓪ *  %CALLM⓪ *)⓪ PROCEDURE MneCALLM;⓪ BEGIN⓪ ASSEMBLER  MOVE.W  #1111111111010%,D3⓪)JSR     TestTypeSource⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #12,D0         ; '#'⓪)BEQ     OK⓪ !AER1    JMP     AERR1⓪ !OK      MOVE.L  #0111011001000%,D0⓪)JSR     CheckModeDest⓪)MOVE.L  DataDest,D0⓪)CMPI.L  #$100,D0⓪)BCS     C1⓪)JMP     AERR16⓪ C1       JSR     ApndD0_W⓪)JMP     DestTo0_5⓪ END⓪ END MneCALLM;⓪ ⓪ *)⓪ ⓪ (*⓪ * %MOVE⓪ *)⓪ PROCEDURE MN21;⓪ BEGIN⓪ ASSEMBLER  MOVE.B  ModeDest,D0⓪)CMPI.B  #13,D0         ; D:SR ? ->⓪)BEQ.L   MN21G⓪)CMPI.B  #15,D0         ; D:CCR ? ->⓪)BEQ.L   MN21H⓪)CMPI.B  #14,D0         ; D:USP ?⓪)BEQ.L   MN21C⓪)MOVE.B  ModeSource,D2⓪)CMPI.B  #13,D2         ; S: SR ?⓪)BEQ.L   MN21A⓪)CMPI.B  #15,D2         ; S:CCR ? ->⓪)BEQ.L   MN21D⓪)CMPI.B  #14,D2         ; S:USP ?⓪)BEQ.L   MN21B⓪)⓪)JSR     LoadSize⓪)JSR     SizeTo12_13    ; D0 bleibt erhalten⓪)⓪)CMPI.B  #13,D2⓪)BCC     AER1⓪ (*$ ? Gepard:⓪)CMPI.B  #2,D2          ; An ?⓪)BNE     MN21J⓪)CMPI.B  #3,RegSource   ; A3 ?⓪)BNE     MN21J⓪)MOVE.W  #asmIllAM,D2   ; ja-> Warning ausgeben⓪)MOVEQ   #1,D3          ; source-Operand⓪)JSR     AsmWarning⓪ MN21J⓪ *)       JSR     SourceTo0_5⓪)⓪)MOVE.B  ModeDest,D0⓪)CMPI.B  #10,D0⓪)BCC     AER1⓪)⓪ (*$ ? Gepard:⓪)CMPI.B  #2,D0          ; An ?⓪)BNE     MN21K⓪)CMPI.B  #3,RegDest     ; A3 ?⓪)BNE     MN21K⓪)MOVE.W  #asmIllAM,D2   ; ja-> Warning ausgeben⓪)MOVEQ   #2,D3          ; dest-Operand⓪)JSR     AsmWarning⓪ MN21K⓪ *)⓪)MOVE.W  D1,D2⓪)CLR.W   D1⓪)JSR     DestTo0_5⓪)MOVE.W  D1,D0⓪)ANDI.W  #111000%,D0⓪)ANDI.W  #000111%,D1⓪)LSR.W   #3,D0⓪)LSL.W   #3,D1⓪)OR.W    D0,D1⓪)LSL.W   #6,D1⓪)OR      D2,D1⓪)JSR     ApndSource⓪)JMP     ApndDest⓪)⓪ AER1     JMP     AERR1⓪ ⓪ MN21D    ; MOVE CCR,<ea>⓪)MOVE    #0100001011000000%,D1⓪)MOVE.L  AsmOptions,D0⓪)BTST    #24,D0         ; $X+?⓪)BNE     MN21E⓪)JMP     AERR17         ; 68020-Mne not allowed⓪ MN21A    ; MOVE SR,<ea>⓪)MOVE    #0100000011000000%,D1⓪ MN21E    MOVEQ   #2,D0⓪)JSR     VerifySize⓪);Size-Bestimmung nicht notwendig, da es⓪);bei Dest. keinen Size-Abh. Operanden gibt⓪)MOVE.B  ModeDest,D0⓪)CMPI.B  #10,D0⓪)BCC     AER1⓪)CMPI.B  #2,D0⓪)BEQ     AER1⓪)JSR     DestTo0_5⓪)JMP     ApndDest⓪)⓪ MN21B    ; MOVE USP,An⓪)MOVEQ   #4,D0⓪)JSR     VerifySize⓪)MOVE.B  ModeDest,D0⓪)CMPI.B  #2,D0⓪)BNE     AER1⓪)MOVE.W  #$4E68,D1⓪)MOVE.B  RegDest,D0⓪)JMP     RegTo0_2⓪ ⓪ MN21C    ; MOVE An,USP⓪)MOVEQ   #4,D0⓪)JSR     VerifySize⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #2,D0⓪)BNE     AER1⓪)MOVE.W  #$4E60,D1⓪)MOVE.B  RegSource,D0⓪)JMP     RegTo0_2⓪)⓪ MN21H    MOVE    #0100010011000000%,D1  ; MOVE <ea>,CCR⓪)MOVEQ   #1,D3                  ; CCR : BYTE-Operation(noetig bei '#')⓪)BRA     MN21I⓪)⓪ MN21G    MOVE    #0100011011000000%,D1  ; MOVE <ea>,SR⓪)MOVEQ   #2,D3                  ; SR : WORD-Operation(noetig bei '#')⓪ MN21I    MOVEQ   #2,D0⓪)JSR     VerifySize⓪)MOVE.B  D3,SizeOfData⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #13,D0⓪)BCC     AER1⓪)CMPI.B  #2,D0⓪)BEQ     AER1⓪)JSR     SourceTo0_5⓪)JMP     ApndSource⓪ END⓪ END MN21;⓪ ⓪ ⓪ (*⓪ *  %MOVEM⓪ *)⓪ PROCEDURE MN22;⓪ BEGIN⓪ ASSEMBLER  JSR     LoadSize⓪)CMPI.B  #1,D0          ;'.B' nicht erlaubt⓪)BNE     OK⓪)JMP     AERR2⓪ ⓪ !OK      CMPI.B  #4,D0          ;Size in Bef-Code eintragen:⓪)BNE     MN22F⓪)BSET    #6,D1⓪ ⓪ MN22F    CMPI.B  #18,ModeSource ;Source = REGLIST ?⓪)BEQ     MN22A          ;ja ->⓪)CMPI.B  #12,ModeSource ;teste Source <ea>⓪)BCS     OK1            ; ->Source <ea> ist OK⓪ !AER1    JMP     AERR1          ;ERROR:Source Adr-Mode nicht erlaubt⓪ ⓪@; MOVEM.X <ea>,Reglist.⓪ !OK1     CMPI.B  #18,ModeDest   ;ist Dest. = 'Reglist.' ?⓪)BNE     AER1           ;Nein ->ERROR⓪)CMPI.B  #5,ModeSource  ;Source = '-(Ax)' ?⓪)BEQ     AER1           ;ja:ERROR⓪)CMPI.B  #3,ModeSource  ;Source = 'Ax' o. 'Dx' ?⓪)BCS     AER1           ;ja:ERROR⓪)BSET    #10,D1         ;Direktion-Flag in Bef-Code setzen⓪ MN22E    JSR     SourceTo0_5    ;<ea> nach Bit 0-5 in Bef-Code⓪)MOVE.W  RegListDest,D0 ;Registerliste laden⓪ (*$ ? Gepard:⓪)BTST    #8+3,D0        ;A3 drin ?⓪)BEQ     MN22E2⓪)MOVE.W  #asmIllAM,D2   ;ja-> Warning ausgeben⓪)MOVEQ   #2,D3          ;dest-Operand⓪)JSR     AsmWarning⓪ MN22E2⓪ *)       JSR     ApndD0_W⓪)JMP     ApndSource⓪ ⓪@; MOVEM.X Reglist.,<ea>⓪ !MN22A   CMPI.B  #12,ModeDest   ;teste Dest.<ea>⓪)BCC     AER1           ;ERROR:unerlaubte Dest.<ea>⓪)JSR     DestTo0_5      ;<ea> nach Bit 0-5 in Bef-Code⓪)MOVE.W  RegListSource,D0 ;Registerliste laden⓪ (*$ ? Gepard:⓪)BTST    #8+3,D0        ;A3 drin ?⓪)BEQ     MN22A2⓪)MOVE.W  #asmIllAM,D2   ;ja-> Warning ausgeben⓪)MOVEQ   #1,D3          ;source-Operand⓪)JSR     AsmWarning⓪ MN22A2⓪ *)       CMPI.B  #3,ModeDest    ;Dest. = '(Ax)' ?⓪)BEQ     MN22B          ;ja:OK⓪)CMPI.B  #5,ModeDest    ;Dest = '-(Ax)' ?⓪)BEQ     MN22C          ;ja:OK⓪)BCC     MN22B          ;-> andere erlaubte Adr.-Art⓪)BRA     AER1           ; = 'Dx' o. 'Ax' o. '(Ax)+' :ERROR⓪ ⓪ MN22C    ;verkehre Reg.liste:⓪)MOVEQ   #15,D3⓪ MN22D    ROXR.W  #1,D0⓪)ROXL.W  #1,D2⓪)DBF     D3,MN22D⓪)MOVE.W  D2,D0⓪ ⓪ MN22B    JSR     ApndD0_W       ; Registerliste als Erw.-Wort zum Code⓪)JMP     ApndDest⓪ END⓪ END MN22;⓪ ⓪ ⓪ (*⓪ *  %MOVEP⓪ *)⓪ PROCEDURE MN23;⓪ BEGIN⓪ ASSEMBLER  JSR     LoadSize⓪)CMPI.B  #1,D0⓪)BNE     OK2⓪)JMP     AERR2⓪ !OK2     CMPI.B  #2,D0⓪)BEQ     MN23A⓪)BSET    #6,D1⓪ MN23A    BSET    #8,D1⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #1,D0⓪)BEQ     MN23B⓪)CMPI.B  #6,D0⓪)BEQ     OK⓪ !AER1    JMP     AERR1⓪ ⓪ !OK      ; MOVEP d16(An),Dn⓪)MOVE.B  ModeDest,D0⓪)CMPI.B  #1,D0⓪)BNE     AER1⓪)MOVE.B  RegSource,D0⓪)JSR     RegTo0_2⓪)JSR     ApndSource⓪)MOVE.B  RegDest,D0⓪)JMP     RegTo9_11⓪ ⓪ MN23B    ; MOVEP Dn,d16(An)⓪)MOVE.B  ModeDest,D0⓪)CMPI.B  #6,D0⓪)BNE     AER1⓪)BSET    #7,D1⓪)MOVE.B  RegSource,D0⓪)JSR     RegTo9_11⓪)MOVE.B  RegDest,D0⓪)JSR     RegTo0_2⓪)JMP     ApndDest⓪ END⓪ END MN23;⓪ ⓪ ⓪ (*⓪ *  %MOVEQ⓪ *)⓪ PROCEDURE MN24;⓪ BEGIN⓪ ASSEMBLER  MOVEQ   #4,D0⓪)JSR     VerifySize⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #12,D0⓪)BEQ     OK⓪ !AER1    JMP     AERR1⓪ !AER2    JMP     AERR2⓪ !OK      MOVE.B  ModeDest,D0⓪)CMPI.B  #1,D0⓪)BNE     AER1⓪)MOVE.W  #1110111000010%,D3⓪)JSR     TestTypeDest⓪)MOVE.B  RegDest,D0⓪)JSR     RegTo9_11⓪)MOVE.L  DataSource,D0⓪)CMPI.L  #$100,D0⓪)BCS     C1⓪)CMPI.L  #$FFFFFF80,D0⓪)BHI     C1⓪)JMP     AERR16⓪ C1       MOVE.B  D0,D1⓪ END⓪ END MN24;⓪ ⓪ ⓪ (*⓪ *  %Scc, %NBCD, %TAS⓪ *)⓪ PROCEDURE MN25;⓪ BEGIN⓪ ASSEMBLER  MOVEQ   #1,D0⓪)JSR     VerifySize⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #10,D0⓪)BCS     OK⓪ !AER1    JMP     AERR1⓪ !OK      CMPI.B  #2,D0⓪)BEQ     AER1⓪)JSR     SourceTo0_5⓪)JSR     ApndSource⓪)JMP     ErrIfOp2⓪ END⓪ END MN25;⓪ ⓪ ⓪ (*⓪ *  %STOP, %RTD⓪ *)⓪ PROCEDURE MneSTOP_RTD;⓪ BEGIN⓪ ASSEMBLER  MOVE.W  #1111111111010%,D3⓪)JSR     TestTypeSource⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #12,D0⓪)BEQ     OK⓪)JMP     AERR1⓪ !OK      JSR     ErrIfSize⓪)MOVE.L  DataSource,D0⓪)CMPI.L  #$10000,D0⓪)BCS     C1⓪)CMPI.L  #$FFFF0000,D0⓪)BHI     C1⓪)JMP     AERR16⓪ C1       JSR     ApndD0_W⓪)JMP     ErrIfOp2⓪ END⓪ END MneSTOP_RTD;⓪ ⓪ ⓪ (*⓪ *  %SWAP⓪ *)⓪ PROCEDURE MN28;⓪ BEGIN⓪ ASSEMBLER  MOVEQ   #2,D0⓪)JSR     VerifySize⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #1,D0⓪)BEQ     OK⓪)JMP     AERR1⓪ !OK      MOVE.B  RegSource,D0⓪)JSR     RegTo0_2⓪)JMP     ErrIfOp2⓪ END⓪ END MN28;⓪ ⓪ ⓪ PROCEDURE @MN29;⓪ BEGIN⓪ ASSEMBLER  CMP.L   DataSource,D0⓪)BCC     C1⓪)JMP     AERR16⓪ C1       OR.L    DataSource,D1⓪)JSR     ErrIfSize⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #12,D0⓪)BEQ     OK⓪)JMP     AERR1⓪ !OK      MOVE.W  #1111111101010%,D3⓪)JSR     TestTypeSource⓪)JMP     ErrIfOp2⓪ END⓪ END @MN29;⓪ ⓪ (*⓪ *  %TRAP⓪ *)⓪ PROCEDURE MN29;⓪ BEGIN⓪ ASSEMBLER  MOVEQ   #$10,D0⓪)JMP     @mn29⓪ END⓪ END MN29;⓪ ⓪ (*$ ? Asm20:⓪ ⓪ (*⓪ *  %BKPT⓪ *)⓪ PROCEDURE MneBKPT;⓪ BEGIN⓪ ASSEMBLER  MOVEQ   #8,D0⓪)JMP     @mn29⓪ END⓪ END MneBKPT;⓪ ⓪ ⓪ (*⓪ *  %TRAPcc⓪ *)⓪ PROCEDURE MneTRAPcc;⓪ BEGIN⓪ ASSEMBLER⓪); Für parameterloses TRAPcc muß '()' verwendet werden⓪)CMPI.B  #12,modeSource⓪)BEQ     hasPara⓪)CMPI.B  #7,modeSource  ; erw. Adr.-Arten der 68020⓪)BNE     AER1⓪)CMPI.B  #$80,M20FlgSource⓪)BNE     AER1⓪)JSR     ErrIfOp2⓪)JSR     ErrIfSize⓪)BSET    #2,D1⓪)RTS⓪)⓪ hasPara  JSR     LoadSize⓪)CMPI.B  #1,D0⓪)BEQ     AER2⓪)BSET    #1,D1⓪)CMPI.B  #2,D0⓪)BEQ     c1⓪)BSET    #0,D1⓪ c1       JMP     ApndSource⓪ ⓪ AER2     JMP     AERR2⓪ AER1     JMP     AERR1⓪ END⓪ END MneTRAPcc;⓪ ⓪ *)⓪ ⓪ (*⓪ *  %UNLK⓪ *)⓪ PROCEDURE MN30;⓪ BEGIN⓪ ASSEMBLER  JSR     ErrIfSize⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #2,D0⓪)BEQ     OK⓪)JMP     AERR1⓪ !OK      MOVE.B  RegSource,D0⓪)JSR     RegTo0_2⓪)JMP     ErrIfOp2⓪ END⓪ END MN30;⓪ ⓪ ⓪ (*⓪ *  %MOVEA⓪ *)⓪ PROCEDURE MN32;⓪ BEGIN⓪ ASSEMBLER  MOVE.B  SizeOfData,D0⓪)CMPI.B  #1,D0⓪)BNE     OK⓪)JMP     AERR2⓪ !OK      MOVE.B  ModeDest,D0⓪)CMPI.B  #2,D0⓪)BEQ     OK1⓪)JMP     AERR1⓪ !OK1     JMP     MN21⓪ END⓪ END MN32;⓪ ⓪ ⓪ (*⓪ *  %MOVEC⓪ *)⓪ PROCEDURE MneMOVEC;⓪ BEGIN⓪ ASSEMBLER⓪)MOVEQ   #4,D0⓪)JSR     VerifySize⓪)CLR     D2⓪)⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #12,D0⓪)BHI     so⓪)⓪)CMPI.B  #1,ModeSource⓪)BEQ     de1⓪)CMPI.B  #2,ModeSource⓪)BEQ     de1⓪ AER1     JMP     AERR1⓪ de1      MOVE.B  RegSource,D2⓪)ROR.W   #4,D2⓪)CMPI.B  #1,ModeSource⓪)BEQ     ok⓪)BSET    #15,D2⓪ ok       MOVE.B  ModeDest,D0⓪)BSET    #0,D1⓪)BRA     c0⓪)⓪ so       CMPI.B  #1,ModeDest⓪)BEQ     so1⓪)CMPI.B  #2,ModeDest⓪)BNE     AER1⓪ so1      MOVE.B  RegDest,D2⓪)ROR.W   #4,D2⓪)CMPI.B  #1,ModeDest⓪)BEQ     c0⓪)BSET    #15,D2⓪ ⓪ c0       CMPI.B  #16,D0         ; VBR ?⓪)BNE     notVBR⓪)ORI     #$801,D2⓪)BRA     E0⓪ notVBR   CMPI.B  #14,D0         ; USP ?⓪)BNE     notUSP⓪)ORI     #$800,D2⓪)BRA     E0⓪ notUSP   CMPI.B  #19,D0         ; SFC ?⓪)BEQ     E0⓪)CMPI.B  #22,D0         ; CAAR ?⓪)CMPI.B  #20,D0         ; DFC ?⓪)BNE     notDFC⓪)ORI     #$001,D2⓪)BRA     E0⓪ notDFC   CMPI.B  #22,D0         ; CAAR ?⓪)CMPI.B  #21,D0         ; CACR ?⓪)BNE     notCACR⓪)ORI     #$002,D2⓪)BRA     E0⓪ notCACR  CMPI.B  #22,D0         ; CAAR ?⓪)BNE     notCAAR⓪)ORI     #$802,D2⓪)BRA     E0⓪ notCAAR  CMPI.B  #23,D0         ; MSP ?⓪)BNE     notMSP⓪)ORI     #$803,D2⓪)BRA     E0⓪ notMSP   CMPI.B  #24,D0         ; ISP ?⓪)BNE     AER1⓪)ORI     #$804,D2⓪ ⓪ E0       MOVE.W  D2,D0⓪)JMP     ApndD0_W⓪ END⓪ END MneMOVEC;⓪ ⓪ ⓪ (*$ ? Asm20:⓪ ⓪ PROCEDURE MneBitFields;⓪ BEGIN⓪ ASSEMBLER  JSR     ErrIfSize⓪)CLR     D2             ; 1. Erw. Wort⓪)BCLR    #6,ModeSource⓪)BNE     BFSource⓪)⓪)BCLR    #6,ModeDest⓪)BNE     BFDest⓪)⓪ AER1     JMP     AERR1⓪)⓪ ApndBitF OR.B    BitWidth,D2⓪)CLR     D0⓪)MOVE.B  BitOffs,D0⓪)LSL     #6,D0⓪)OR      D2,D0⓪)JMP     ApndD0_W⓪)⓪ BFdest   MOVE.B  RegSource,D2⓪)ROR     #4,D2⓪ c0       JSR     DestToLast⓪)BSR     ApndBitF⓪)JSR     DestTo0_5⓪)JMP     ApndDest⓪)⓪ BFsource TST.B   ModeDest⓪)BEQ     c1⓪)MOVE.B  RegDest,D2⓪)ROR     #4,D2⓪ c1       JSR     SourceToLast⓪)BSR     ApndBitF⓪)JSR     SourceTo0_5⓪)JMP     ApndSource⓪ END⓪ END MneBitFields;⓪ ⓪ ⓪ (*⓪!*  %BFCHG, %BFCLR, %BFSET⓪!*)⓪ PROCEDURE MneBitFea;⓪ BEGIN⓪ ASSEMBLER  JSR     ErrIfOp2⓪)MOVE.L  #0001011001010%,D0⓪)JSR     CheckModeSource⓪)JMP     MneBitFields⓪ END⓪ END MneBitFea;⓪ ⓪ ⓪ (*⓪!*  %BFTST⓪!*)⓪ PROCEDURE MneBitFea2;⓪ BEGIN⓪ ASSEMBLER  JSR     ErrIfOp2⓪)MOVE.L  #0111011001010%,D0⓪)JSR     CheckModeSource⓪)JMP     MneBitFields⓪ END⓪ END MneBitFea2;⓪ ⓪ ⓪ (*⓪ *  %BFEXTS %BFEXTU, %BFFFO⓪ *)⓪ PROCEDURE MneBitFea_;⓪ BEGIN⓪ ASSEMBLER  CMPI.B  #1,ModeDest⓪)BNE     AER1⓪)MOVE.L  #0111011001010%,D0⓪)JSR     CheckModeSource⓪)JMP     MneBitFields⓪ AER1     JMP     AERR1⓪ END⓪ END MneBitFea_;⓪ ⓪ ⓪ (*⓪ *  %BFINS⓪ *)⓪ PROCEDURE MneBitF_ea;⓪ BEGIN⓪ ASSEMBLER  CMPI.B  #1,ModeSource⓪)BNE     AER1⓪)MOVE.L  #0001011001010%,D0⓪)JSR     CheckModeDest⓪)JMP     MneBitFields⓪ AER1     JMP     AERR1⓪ END⓪ END MneBitF_ea;⓪ ⓪ ⓪ (*⓪ *  %MOVES⓪ *)⓪ PROCEDURE MneMOVES;⓪ BEGIN⓪ ASSEMBLER  JMP     AERR19⓪ END⓪ END MneMOVES;⓪ ⓪ ⓪ ⓪ (* Beginn der 68881 - Auswertung *)⓪ ⓪ PROCEDURE FLoadSize;⓪ BEGIN⓪ ASSEMBLER  MOVE.B  SizeOfData,D0⓪)BNE     C1⓪)MOVEQ   #DefltSiz,D0⓪ C1       MOVE.B  D0,SizeOfData⓪ END⓪ END FLoadSize;⓪ ⓪ ⓪ (*⓪!* Anhängen des 68881 op-codes⓪!*)⓪ PROCEDURE ApndZw ;⓪ BEGIN⓪ ASSEMBLER  MOVE.L  D1,D0⓪)SWAP    D0⓪)JMP     ApndD0_W⓪ END⓪ END ApndZw ;⓪ ⓪ ⓪ (*⓪!* %RegTo0_2Zw⓪!*)⓪ PROCEDURE RegTo0_2Zw ;⓪ BEGIN⓪ ASSEMBLER  ANDI.L  #$07,D0⓪)SWAP    D0⓪)OR.L    D0,D1⓪ END⓪ END RegTo0_2Zw ;⓪ ⓪ ⓪ (*⓪!* %RegTo7_9Zw⓪!*)⓪ PROCEDURE RegTo7_9Zw ;⓪ BEGIN⓪ ASSEMBLER  ANDI.L  #$07,D0⓪)SWAP    D0⓪)LSL.L   #7,D0⓪)OR.L    D0,D1⓪ END⓪ END RegTo7_9Zw ;⓪ ⓪ ⓪ (*⓪!* %RegTo10_12Zw ;⓪!*)⓪ PROCEDURE RegTo10_12Zw ;⓪ BEGIN⓪ ASSEMBLER  ANDI.L  #$07,D0⓪)SWAP    D0⓪)LSL.L   #5,D0⓪)LSL.L   #5,D0⓪)OR.L    D0,D1⓪ END⓪ END RegTo10_12Zw ;⓪ ⓪ ⓪ (*⓪!* %SizeTo10_12Zw⓪!*)⓪ PROCEDURE SizeTo10_12Zw ;⓪ BEGIN⓪ ASSEMBLER  MOVEQ   #110%,D0⓪)CMPI.B  #$01,SizeOfData⓪)BEQ     SizeE⓪)MOVEQ   #100%,D0⓪)CMPI.B  #$02,SizeOfData⓪)BEQ     SizeE⓪)MOVEQ   #000%,D0⓪)CMPI.B  #$04,SizeOfData⓪)BEQ     SizeE⓪)MOVEQ   #001%,D0⓪)CMPI.B  #$08,SizeOfData⓪)BEQ     SizeE⓪)MOVEQ   #101%,D0⓪)CMPI.B  #$10,SizeOfData⓪)BEQ     SizeE⓪)MOVEQ   #010%,D0⓪)CMPI.B  #$20,SizeOfData⓪)BEQ     SizeE⓪)MOVEQ   #011%,D0⓪)CMPI.B  #$40,SizeOfData⓪)BEQ     SizeE⓪)JMP     AERR1⓪ SizeE    ANDI.L  #$07,D0⓪)SWAP    D0⓪)LSL.L   #5,D0⓪)LSL.L   #5,D0⓪)OR.L    D0,D1⓪ END⓪ END SizeTo10_12Zw ;⓪ ⓪ ⓪ (*⓪!* %FMOVECR⓪!*)⓪ PROCEDURE MneFMoveCr ;⓪ BEGIN⓪ ASSEMBLER  MOVEQ   #$20,D0⓪)JSR     VerifySize⓪)CMPI.B  #12,ModeSource⓪)BEQ     SOK⓪ AER1     JMP     AERR1⓪ SOK      CMPI.B  #25,ModeDest⓪)BNE     AER1⓪)MOVE.W  #1111111101010%,D3⓪)JSR     TestTypeSource⓪)MOVE.L  DataSource,D0⓪)CMPI.L  #$80,D0⓪)BCS     OK⓪)JMP     AERR2⓪ OK       SWAP    D0⓪)OR.L    D0,D1⓪)MOVE.B  RegDest,D0⓪)JSR     RegTo7_9Zw⓪)JMP     ApndZw⓪ END⓪ END MneFMoveCr ;⓪ ⓪'⓪ (*⓪!* Ausführen einer <ea>⓪!*)⓪ PROCEDURE ProcessEA ;⓪ BEGIN⓪ ASSEMBLER  JSR     ApndZw⓪)JSR     VerifyEA⓪)JSR     EATo0_5⓪)JMP     ApndEA⓪ END⓪ END ProcessEA ;⓪ ⓪ ⓪ (*⓪!* Append <fea>⓪!*)⓪ PROCEDURE Apndfea ;⓪ BEGIN⓪ ASSEMBLER  CMPI.B  #25,Mode⓪)BEQ     REGREGOP⓪)BSET    #30,D1⓪)JSR     FLoadSize⓪)CMPI.B  #02,Mode⓪)BNE     MOK⓪ AER1     JMP     AERR1⓪ AER2     JMP     AERR2⓪ MOK      BCC     SOK⓪)MOVE.B  SizeOfData,D0⓪)ANDI.B  #00001111%,D0⓪)BEQ     AER2⓪ SOK      JSR     SizeTo10_12Zw⓪)JMP     ProcessEA⓪ REGREGOP MOVEQ   #$20,D0⓪)JSR     VerifySize⓪)MOVE.B  Reg,D0⓪)JSR     RegTo10_12Zw⓪)JMP     ApndZw⓪ END⓪ END Apndfea ;⓪ ⓪ ⓪ (*⓪!* Verbiten von ..PC und #..⓪!*)⓪ PROCEDURE ErrOnImOrPc ;⓪ BEGIN⓪ ASSEMBLER  CMPI.B  #10,Mode⓪)BCS     OK⓪)JMP     AERR1⓪ OK⓪ END⓪ END ErrOnImOrPc ;⓪ ⓪ ⓪ (*⓪!* Eintragen von FPm ÕÕœ FPn oder <EA> ÕÕœ FPn⓪!*)⓪ PROCEDURE TrasferToFPn ;⓪ BEGIN⓪ ASSEMBLER  CMPI.B  #25,ModeDest⓪)BEQ     SOK⓪)JMP     AERR1⓪ SOK      MOVE.B  RegDest,D0⓪)JSR     RegTo7_9Zw⓪)JSR     SourceToLast⓪)JMP     Apndfea⓪ END⓪ END TrasferToFPn ;⓪ ⓪ ⓪ (*⓪!* %FMOVEM⓪!*)⓪ PROCEDURE MneFMoveM ;⓪ BEGIN⓪ ASSEMBLER  CMPI.B  #26,ModeDest⓪)BEQ     MnToFPnS⓪)CMPI.B  #26,ModeSource⓪)BEQ     MnFrFPnS⓪)CMPI.B  #01,ModeDest⓪)BEQ.L   MnToFPnD⓪)CMPI.B  #01,ModeSource⓪)BEQ.L   MnFrFPnD⓪)CMPI.B  #28,ModeDest⓪)BEQ.L   MnToFPcr⓪)CMPI.B  #28,ModeSource⓪)BEQ.L   MnFrFPcr⓪ AER1     JMP     AERR1⓪ ToMem    JSR     DestToLast⓪)CMPI.B  #10,Mode⓪)BCC     AER1⓪)CMPI.B  #04,Mode⓪)BEQ     AER1⓪)BSET    #29,D1⓪)RTS⓪ FromMem  JSR     SourceToLast⓪)CMPI.B  #05,Mode⓪)BEQ     AER1⓪)RTS⓪ MnToFPnS BSR     FromMem⓪)MOVE.W  RegListDest,D0⓪)BRA     MnMFPnS⓪ MnFrFPnS BSR     ToMem⓪)MOVE.W  RegListSource,D0⓪ MnMFPnS  CMPI.B  #05,Mode⓪)BEQ     ListOk⓪)MOVEQ   #7,D3⓪ REP      ROXR.B  #1,D0⓪)ROXL.B  #1,D2⓪)DBF     D3,REP⓪)MOVE.B  D2,D0⓪)BSET    #28,D1⓪ ListOk   ANDI.L  #$FF,D0⓪)SWAP    D0⓪)OR.L    D0,D1⓪)BRA     MnMFPn⓪ MnToFPnD BSR     FromMem⓪)MOVE.B  RegDest,D0⓪)BRA     MnMFPnD⓪ MnFrFPnD BSR     ToMem⓪)MOVE.B  RegSource,D0⓪ MnMFPnD  CMPI.B  #05,Mode⓪)BEQ     DirOk⓪)BSET    #28,D1⓪ DirOk    ANDI.L  #$7,D0⓪)LSL.W   #4,D0⓪)SWAP    D0⓪)OR.L    D0,D1⓪)BSET    #27,D1⓪ MnMFPn   CMPI.B  #02,Mode⓪)BLS     AER1H⓪)CMPI.B  #12,Mode⓪)BCC     AER1H⓪)MOVEQ   #$20,D0⓪)JSR     VerifySize⓪)MOVE.B  D0,SizeOfData⓪)BSET    #30,D1⓪)JMP     ProcessEA⓪ AER1H    BRA.L   AER1⓪ MnToFPcr JSR     SourceToLast⓪)MOVE.W  RegListDest,D0⓪)BRA     MnMFPcr⓪ MnFrFPcr JSR     DestToLast⓪)CMPI.B  #10,Mode⓪)BCC     AER1H⓪)BSET    #29,D1⓪)MOVE.W  RegListSource,D0⓪ MnMFPcr  ANDI.L  #7,D0⓪)LSL.W   #5,D0⓪)LSL.W   #5,D0⓪)SWAP    D0⓪)OR.L    D0,D1⓪)CMPI.B  #02,Mode⓪)BLS     AER1H⓪)CMPI.B  #12,Mode⓪)BCC     AER1H⓪)MOVEQ   #$04,D0⓪)JSR     VerifySize⓪)MOVE.B  D0,SizeOfData⓪)JMP     ProcessEA⓪ END⓪ END MneFMoveM ;⓪ ⓪'⓪ (*⓪!* %FMOVE⓪!*)⓪ PROCEDURE MneFMove ;⓪ BEGIN⓪ ASSEMBLER  CMPI.B  #25,ModeDest⓪)BEQ     MnToFPn⓪)CMPI.B  #25,ModeSource⓪)BNE     MnMCCr⓪)CMPI.B  #29,ModeDest⓪)BEQ     MnFrFPn2⓪)CMPI.B  #30,ModeDest⓪)BEQ     MnFrFPn3⓪)BRA     MnFrFPn1⓪ MnMCCr   CMPI.B  #27,ModeDest⓪)BEQ.L   MnToFPcr⓪)CMPI.B  #27,ModeSource⓪)BEQ.L   MnFrFPcr⓪ AER1     JMP     AERR1⓪ AER2     JMP     AERR2⓪ MnToFPn  JMP     TrasferToFPn⓪ MnFrFPn3 MOVE.B  FormatDest,D0⓪)BRA     MnFrFpnP⓪ MnFrFPn2 BSET    #28,D1⓪)MOVE.B  FormatDest,D0⓪)LSL.B   #4,D0⓪ MnFrFPnP ANDI.L  #$7F,D0⓪)SWAP    D0⓪)OR.L    D0,D1⓪)CMPI.B  #$40,SizeOfData⓪)BNE     AER1⓪)MOVE.B  Mode2Dest,ModeDest⓪)BRA     MnFrFPn⓪ MnFrFPn1 CMPI.B  #$40,SizeOfData⓪)BEQ     AER1⓪ MnFrFPn  BSET    #29,D1⓪)MOVE.B  RegSource,D0⓪)JSR     RegTo7_9Zw⓪)JSR     DestToLast⓪)JSR     ErrOnImOrPc⓪)JMP     Apndfea⓪ MnToFPcr JSR     SourceToLast⓪)MOVE.B  RegDest,D0⓪)BRA     MnMFPcr⓪ MnFrFPcr JSR     DestToLast⓪)JSR     ErrOnImOrPc⓪)MOVE.B  RegSource,D0⓪)BSET    #29,D1⓪ MnMFPcr  ADDI.B  #26,D0⓪)BSET    D0,D1⓪)MOVE.B  Mode,D2⓪)CMPI.B  #02,D2⓪)BNE     MnAMOk⓪)CMPI.B  #26,D0⓪)BEQ     MnAMOk⓪)JMP     AERR1⓪ MnAMOk   BSET    #31,D1⓪)MOVEQ   #4,D0⓪)JSR     VerifySize⓪)MOVE.B  D0,SizeOfData⓪)JMP     ProcessEA⓪ END⓪ END MneFMove ;⓪ ⓪'⓪ (*⓪!*  %FADD, %FCMP, %FDIV, %FMOD, %FMUL, %FREM, %FSCALE, %FSGLDIV, %FSGLMUL,⓪!*  %FSUB⓪!*)⓪ PROCEDURE MneDyOp ;⓪ BEGIN⓪ ASSEMBLER  JMP     TrasferToFPn⓪ END⓪ END MneDyOp ;⓪ ⓪'⓪ (*⓪!* %FTST⓪!*)⓪ PROCEDURE MneFTst ;⓪ BEGIN⓪ ASSEMBLER  JSR     ErrIfOp2⓪)JSR     SourceToLast⓪)JMP     Apndfea⓪ END⓪ END MneFTst ;⓪ ⓪'⓪ (*⓪!* %FABS, %FACOS, %FASIN, %FATAN, %FATANH, %FCOS, %FCOSH, %FETOX, %FETOXM1,⓪!* %FGETEXP, %FGETMAN, %FINT, %FINTRZ, %FLOGN, %FLOGNP1, %FLOG10, %FLOG2,⓪!* %FNEG, %FSIN, %FSINH, %FSQRT, %FTAN, %FTANH, %FTENTOX, %FTWOTOX⓪!*)⓪ PROCEDURE MneMoOp ;⓪ BEGIN⓪ ASSEMBLER  Tst.W   ModeDest⓪)BNE     ToOpSpez⓪)JSR     SourceToLast⓪)JSR     LastToDest⓪ ToOpSpez JMP     TrasferToFPn⓪ END⓪ END MneMoOp  ;⓪ ⓪'⓪ (*⓪!* %FSINCOS⓪!*)⓪ PROCEDURE MneDualMoOp ;⓪ BEGIN⓪ ASSEMBLER  CMPI.B  #$80+25,ModeDest⓪)BEQ     SOK⓪ AER1     JMP     AERR1⓪ SOK      BCLR    #7,ModeDest⓪)CMPI.B  #25,Mode2Dest⓪)BNE     AER1⓪)MOVE.B  RegDest,D0⓪)CMP.B   Reg2Dest,D0⓪)BEQ     AER1⓪)JSR     RegTo0_2Zw⓪)MOVE.B  Reg2Dest,RegDest⓪)JMP     TrasferToFPn⓪ END⓪ END MneDualMoOp ;⓪ ⓪ ⓪ (*⓪!* %FSAVE⓪!*)⓪ PROCEDURE MneFSave ;⓪ BEGIN⓪ ASSEMBLER  JSR     ErrIfSize⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #10,D0⓪)BCS     OK⓪ !AER1    JMP     AERR1⓪ !OK      CMPI.B  #2,D0⓪)BLS     AER1⓪)CMPI.B  #4,D0⓪)BEQ     AER1⓪)JSR     SourceTo0_5⓪)JSR     ApndSource⓪)JMP     ErrIfOp2⓪ END⓪ END MneFSave ;⓪ ⓪'⓪ (*⓪!* %FRESTORE⓪!*)⓪ PROCEDURE MneFRes ;⓪ BEGIN⓪ ASSEMBLER  JSR     ErrIfSize⓪)MOVE.B  ModeSource,D0⓪)CMPI.B  #12,D0⓪)BCS     OK⓪ !AER1    JMP     AERR1⓪ !OK      CMPI.B  #2,D0⓪)BLS     AER1⓪)CMPI.B  #5,D0⓪)BEQ     AER1⓪)JSR     SourceTo0_5⓪)JSR     ApndSource⓪)JMP     ErrIfOp2⓪ END⓪ END MneFRes ;⓪ ⓪'⓪ (*⓪!* %FScc⓪!*)⓪ PROCEDURE MneFScc ;⓪ BEGIN⓪ ASSEMBLER  JSR     ApndZw⓪)JMP     MN25⓪ END⓪ END MneFScc ;⓪ ⓪'⓪ (*⓪!* %FTRAPcc⓪!*)⓪ PROCEDURE MneFTRAPcc ;⓪ BEGIN⓪ ASSEMBLER⓪)JSR     ApndZw⓪)JMP     MneTRAPcc⓪ END⓪ END MneFTRAPcc ;⓪ ⓪'⓪ (*⓪!*   %FBcc⓪!*)⓪ PROCEDURE MneFBcc;⓪ BEGIN⓪ ASSEMBLER  JSR     ErrIfOp2⓪)MOVEQ   #2,D0⓪)JSR     VerifySize⓪)MOVE.B  D0,SizeOfData  ; '.W' als Default⓪)JSR     SourceToLast⓪)JMP     @MN7A⓪ END⓪ END MneFBcc;⓪ ⓪ ⓪ (*⓪!*  %FDBcc⓪!*)⓪ PROCEDURE MneFDBcc;⓪ BEGIN⓪ ASSEMBLER  MOVE.B  ModeSource,D0⓪)CMPI.B  #1,D0          ;Source = 'Dn' ?⓪)BEQ     OK⓪)JMP     AERR1          ;nein:ERROR⓪ !OK      MOVEQ   #2,D0⓪)JSR     VerifySize⓪)MOVE.B  D0,SizeOfData  ; '.W' als Default⓪)JSR     ApndZw⓪)MOVE.B  RegSource,D0⓪)JSR     RegTo0_2       ;setze Reg. in Code-Wort⓪)JSR     DestToLast⓪)JMP     @MN7A⓪ END⓪ END MneFDBcc;⓪ ⓪ (* Ende Gepard-Conditional *) *)⓪ ⓪ PROCEDURE MneJmpTab;⓪ BEGIN⓪ ASSEMBLER⓪)DC.L    MN0⓪)DC.L    MN0⓪)DC.L    MN31⓪)DC.L    MN31⓪)DC.L    MN1    ;%ADD⓪)DC.L    MN1    ;%AND⓪)DC.L    MN1    ;%OR⓪)DC.L    MN1    ;%SUB⓪)DC.L    MN2    ;%ADDA⓪)DC.L    MN2    ;%CMPA⓪)DC.L    MN2    ;%SUBA⓪)DC.L    MN32   ;%MOVEA⓪)DC.L    MN3    ;%ADDI⓪)DC.L    MN3    ;%CMPI⓪)DC.L    MN3    ;%SUBI⓪)DC.L    MN4    ;%ANDI⓪)DC.L    MN4    ;%EORI⓪)DC.L    MN4    ;%ORI⓪)DC.L    MN5    ;%ADDQ⓪)DC.L    MN5    ;%SUBQ⓪)DC.L    MN6    ;%ASL⓪)DC.L    MN6    ;%ASR⓪)DC.L    MN6    ;%LSL⓪)DC.L    MN6    ;%LSR⓪)DC.L    MN6    ;%ROL⓪)DC.L    MN6    ;%ROR⓪)DC.L    MN6    ;%ROXL⓪)DC.L    MN6    ;%ROXR⓪)DC.L    MN7    ;%BCC           %Bcc⓪)DC.L    MN7    ;%BCS⓪)DC.L    MN7    ;%BEQ⓪)DC.L    MN7    ;%BGE⓪)DC.L    MN7    ;%BGT⓪)DC.L    MN7    ;%BHI⓪)DC.L    MN7    ;%BLE⓪)DC.L    MN7    ;%BLS⓪)DC.L    MN7    ;%BLT⓪)DC.L    MN7    ;%BMI⓪)DC.L    MN7    ;%BNE⓪)DC.L    MN7    ;%BPL⓪)DC.L    MN7    ;%BVC⓪)DC.L    MN7    ;%BVS⓪)DC.L    MN7    ;%BRA⓪)DC.L    MN7    ;%BSR⓪)DC.L    MN8    ;%BCHG⓪)DC.L    MN8    ;%BCLR⓪)DC.L    MN8    ;%BSET⓪)DC.L    MN9    ;%BTST⓪)DC.L    MneCHK ;%CHK⓪)DC.L    MN10   ;%MULS⓪)DC.L    MN10   ;%MULU⓪)DC.L    MN10   ;%DIVS⓪)DC.L    MN10   ;%DIVU⓪)DC.L    MN11   ;%CLR⓪)DC.L    MN11   ;%NEG⓪)DC.L    MN11   ;%NEGX⓪)DC.L    MN11   ;%NOT⓪)DC.L    MneTST ;%TST⓪)DC.L    MN12   ;%CMP⓪)DC.L    MN13   ;%CMPM⓪)DC.L    MN14   ;               %DBcc⓪)DC.L    MN14⓪)DC.L    MN14⓪)DC.L    MN14⓪)DC.L    MN14⓪)DC.L    MN14⓪)DC.L    MN14⓪)DC.L    MN14⓪)DC.L    MN14⓪)DC.L    MN14⓪)DC.L    MN14⓪)DC.L    MN14⓪)DC.L    MN14⓪)DC.L    MN14⓪)DC.L    MN14⓪)DC.L    MN14⓪)DC.L    MN14⓪)DC.L    MN15   ;%EOR⓪)DC.L    MN16   ;%EXG⓪)DC.L    MneEXT ;%EXT⓪)DC.L    MN18   ;%JMP⓪)DC.L    MN18   ;%JSR⓪)DC.L    MN18P  ;%PEA⓪)DC.L    MN19   ;%LEA⓪)DC.L    MN20   ;%LINK⓪)DC.L    MN21   ;%MOVE⓪)DC.L    MN22   ;%MOVEM⓪)DC.L    MN23   ;%MOVEP⓪)DC.L    MN24   ;%MOVEQ⓪)DC.L    MN25   ;%NBCD⓪)DC.L    MN25   ;%SCC           %Scc⓪)DC.L    MN25⓪)DC.L    MN25⓪)DC.L    MN25⓪)DC.L    MN25⓪)DC.L    MN25⓪)DC.L    MN25⓪)DC.L    MN25⓪)DC.L    MN25⓪)DC.L    MN25⓪)DC.L    MN25⓪)DC.L    MN25⓪)DC.L    MN25⓪)DC.L    MN25⓪)DC.L    MN25⓪)DC.L    MN25⓪)DC.L    MN25           ;%TAS⓪)DC.L    NoOperands     ;%NOP⓪)DC.L    NoOperands     ;%RTE⓪)DC.L    NoOperands     ;%RTS⓪)DC.L    NoOperands     ;%TRAPV⓪)DC.L    NoOperands     ;%RESET⓪)DC.L    MneSTOP_RTD    ;%STOP⓪)DC.L    MN28           ;%SWAP⓪)DC.L    MN29           ;%TRAP⓪)DC.L    MN30           ;%UNLK⓪)DC.L    NoOperands     ;%RTR⓪)DC.L    MN14           ;%DBRA⓪)DC.L    NoOperands     ;%ILLEGAL⓪)DC.L    NoOperands     ;%BREAK⓪)DC.L    MneMOVEC       ;%MOVEC⓪)DC.L    MneSTOP_RTD    ;%RTD⓪ (*$ ? Asm20:⓪); Erweiterungen seit 3.3a / 1.8.86 f. 68020⓪)DC.L    MneBitFea      ;%BFCHG⓪)DC.L    MneBitFea      ;%BFCLR⓪)DC.L    MneBitFea_     ;%BFEXTS⓪)DC.L    MneBitFea_     ;%BFEXTU⓪)DC.L    MneBitFea_     ;%BFFFO⓪)DC.L    MneBitF_ea     ;%BFINS⓪)DC.L    MneBitFea      ;%BFSET⓪)DC.L    MneBitFea2     ;%BFTST⓪)DC.L    MneBKPT        ;%BKPT⓪)DC.L    MneCALLM       ;%CALLM⓪)DC.L    MneCAS         ;%CAS⓪)DC.L    MneCAS2        ;%CAS2⓪)DC.L    MneCHK2_CMP2   ;%CHK2⓪)DC.L    MneCHK2_CMP2   ;%CMP2⓪)DC.L    MneDIVSL_UL    ;%DIVSL⓪)DC.L    MneDIVSL_UL    ;%DIVUL⓪)DC.L    MneEXT         ;%EXTB⓪)DC.L    MneMOVES       ;%MOVES⓪)DC.L    MnePACK_UNPK   ;%PACK⓪)DC.L    MneRTM         ;%RTM⓪)DC.L    MneTRAPcc      ;%TRAPCC⓪)DC.L    MneTRAPcc      ;%TRAPCS⓪)DC.L    MneTRAPcc      ;%TRAPEQ⓪)DC.L    MneTRAPcc      ;%TRAPF⓪)DC.L    MneTRAPcc      ;%TRAPGE⓪)DC.L    MneTRAPcc      ;%TRAPGT⓪)DC.L    MneTRAPcc      ;%TRAPHI⓪)DC.L    MneTRAPcc      ;%TRAPLE⓪)DC.L    MneTRAPcc      ;%TRAPLS⓪)DC.L    MneTRAPcc      ;%TRAPLT⓪)DC.L    MneTRAPcc      ;%TRAPMI⓪)DC.L    MneTRAPcc      ;%TRAPNE⓪)DC.L    MneTRAPcc      ;%TRAPPL⓪)DC.L    MneTRAPcc      ;%TRAPT⓪)DC.L    MneTRAPcc      ;%TRAPVC⓪)DC.L    MneTRAPcc      ;%TRAPVS⓪)DC.L    MnePACK_UNPK   ;%UNPK⓪)⓪); Erweiterung für 68881⓪)DC.L    MneFMove       ;%FMOVE        ; Umspeichern⓪)DC.L    MneFMoveCr     ;%FMOVECR⓪)DC.L    MneFMoveM      ;%FMOVEM⓪)DC.L    MneFRes        ;%FRESTORE⓪)DC.L    MneFSave       ;%FSAVE⓪)DC.L    NoOperandsWZE  ;%FNOP⓪)DC.L    MneFTst        ;%FTST⓪)DC.L    MneFBcc        ;%FBEQ         ; Controls⓪)DC.L    MneFBcc        ;%FBF⓪)DC.L    MneFBcc        ;%FBGE⓪)DC.L    MneFBcc        ;%FBGL⓪)DC.L    MneFBcc        ;%FBGLE⓪)DC.L    MneFBcc        ;%FBGT⓪)DC.L    MneFBcc        ;%FBLE⓪)DC.L    MneFBcc        ;%FBLT⓪)DC.L    MneFBcc        ;%FBNE⓪)DC.L    MneFBcc        ;%FBNGE⓪)DC.L    MneFBcc        ;%FBNGL⓪)DC.L    MneFBcc        ;%FBNGLE⓪)DC.L    MneFBcc        ;%FBNGT⓪)DC.L    MneFBcc        ;%FBNLE⓪)DC.L    MneFBcc        ;%FBNLT⓪)DC.L    MneFBcc        ;%FBSEQ⓪)DC.L    MneFBcc        ;%FBSF⓪)DC.L    MneFBcc        ;%FBSNE⓪)DC.L    MneFBcc        ;%FBST⓪)DC.L    MneFBcc        ;%FBOGE⓪)DC.L    MneFBcc        ;%FBOGL⓪)DC.L    MneFBcc        ;%FBOGT⓪)DC.L    MneFBcc        ;%FBOLE⓪)DC.L    MneFBcc        ;%FBOLT⓪)DC.L    MneFBcc        ;%FBOR⓪)DC.L    MneFBcc        ;%FBT⓪)DC.L    MneFBcc        ;%FBUGE⓪)DC.L    MneFBcc        ;%FBUEQ⓪)DC.L    MneFBcc        ;%FBUN⓪)DC.L    MneFBcc        ;%FBUGT⓪)DC.L    MneFBcc        ;%FBULE⓪)DC.L    MneFBcc        ;%FBULT⓪)DC.L    MneFDBcc       ;%FDBEQ⓪)DC.L    MneFDBcc       ;%FDBF⓪)DC.L    MneFDBcc       ;%FDBGE⓪)DC.L    MneFDBcc       ;%FDBGL⓪)DC.L    MneFDBcc       ;%FDBGLE⓪)DC.L    MneFDBcc       ;%FDBGT⓪)DC.L    MneFDBcc       ;%FDBLE⓪)DC.L    MneFDBcc       ;%FDBLT⓪)DC.L    MneFDBcc       ;%FDBNE⓪)DC.L    MneFDBcc       ;%FDBNGE⓪)DC.L    MneFDBcc       ;%FDBNGL⓪)DC.L    MneFDBcc       ;%FDBNGLE⓪)DC.L    MneFDBcc       ;%FDBNGT⓪)DC.L    MneFDBcc       ;%FDBNLE⓪)DC.L    MneFDBcc       ;%FDBNLT⓪)DC.L    MneFDBcc       ;%FDBSEQ⓪)DC.L    MneFDBcc       ;%FDBSF⓪)DC.L    MneFDBcc       ;%FDBSNE⓪)DC.L    MneFDBcc       ;%FDBST⓪)DC.L    MneFDBcc       ;%FDBOGE⓪)DC.L    MneFDBcc       ;%FDBOGL⓪)DC.L    MneFDBcc       ;%FDBOGT⓪)DC.L    MneFDBcc       ;%FDBOLE⓪)DC.L    MneFDBcc       ;%FDBOLT⓪)DC.L    MneFDBcc       ;%FDBOR⓪)DC.L    MneFDBcc       ;%FDBT⓪)DC.L    MneFDBcc       ;%FDBUGE⓪)DC.L    MneFDBcc       ;%FDBUEQ⓪)DC.L    MneFDBcc       ;%FDBUN⓪)DC.L    MneFDBcc       ;%FDBUGT⓪)DC.L    MneFDBcc       ;%FDBULE⓪)DC.L    MneFDBcc       ;%FDBULT⓪)DC.L    MneFScc        ;%FSEQ⓪)DC.L    MneFScc        ;%FSF⓪)DC.L    MneFScc        ;%FSGE⓪)DC.L    MneFScc        ;%FSGL⓪)DC.L    MneFScc        ;%FSGLE⓪)DC.L    MneFScc        ;%FSGT⓪)DC.L    MneFScc        ;%FSLE⓪)DC.L    MneFScc        ;%FSLT⓪)DC.L    MneFScc        ;%FSNE⓪)DC.L    MneFScc        ;%FSNGE⓪)DC.L    MneFScc        ;%FSNGL⓪)DC.L    MneFScc        ;%FSNGLE⓪)DC.L    MneFScc        ;%FSNGT⓪)DC.L    MneFScc        ;%FSNLE⓪)DC.L    MneFScc        ;%FSNLT⓪)DC.L    MneFScc        ;%FSSEQ⓪)DC.L    MneFScc        ;%FSSF⓪)DC.L    MneFScc        ;%FSSNE⓪)DC.L    MneFScc        ;%FSST⓪)DC.L    MneFScc        ;%FSOGE⓪)DC.L    MneFScc        ;%FSOGL⓪)DC.L    MneFScc        ;%FSOGT⓪)DC.L    MneFScc        ;%FSOLE⓪)DC.L    MneFScc        ;%FSOLT⓪)DC.L    MneFScc        ;%FSOR⓪)DC.L    MneFScc        ;%FST⓪)DC.L    MneFScc        ;%FSUGE⓪)DC.L    MneFScc        ;%FSUEQ⓪)DC.L    MneFScc        ;%FSUN⓪)DC.L    MneFScc        ;%FSUGT⓪)DC.L    MneFScc        ;%FSULE⓪)DC.L    MneFScc        ;%FSULT⓪)DC.L    MneFTRAPcc     ;%FTRAPEQ⓪)DC.L    MneFTRAPcc     ;%FTRAPF⓪)DC.L    MneFTRAPcc     ;%FTRAPGE⓪)DC.L    MneFTRAPcc     ;%FTRAPGL⓪)DC.L    MneFTRAPcc     ;%FTRAPGLE⓪)DC.L    MneFTRAPcc     ;%FTRAPGT⓪)DC.L    MneFTRAPcc     ;%FTRAPLE⓪)DC.L    MneFTRAPcc     ;%FTRAPLT⓪)DC.L    MneFTRAPcc     ;%FTRAPNE⓪)DC.L    MneFTRAPcc     ;%FTRAPNGE⓪)DC.L    MneFTRAPcc     ;%FTRAPNGL⓪)DC.L    MneFTRAPcc     ;%FTRAPNGLE⓪)DC.L    MneFTRAPcc     ;%FTRAPNGT⓪)DC.L    MneFTRAPcc     ;%FTRAPNLE⓪)DC.L    MneFTRAPcc     ;%FTRAPNLT⓪)DC.L    MneFTRAPcc     ;%FTRAPSEQ⓪)DC.L    MneFTRAPcc     ;%FTRAPSF⓪)DC.L    MneFTRAPcc     ;%FTRAPSNE⓪)DC.L    MneFTRAPcc     ;%FTRAPST⓪)DC.L    MneFTRAPcc     ;%FTRAPOGE⓪)DC.L    MneFTRAPcc     ;%FTRAPOGL⓪)DC.L    MneFTRAPcc     ;%FTRAPOGT⓪)DC.L    MneFTRAPcc     ;%FTRAPOLE⓪)DC.L    MneFTRAPcc     ;%FTRAPOLT⓪)DC.L    MneFTRAPcc     ;%FTRAPOR⓪)DC.L    MneFTRAPcc     ;%FTRAPT⓪)DC.L    MneFTRAPcc     ;%FTRAPUGE⓪)DC.L    MneFTRAPcc     ;%FTRAPUEQ⓪)DC.L    MneFTRAPcc     ;%FTRAPUN⓪)DC.L    MneFTRAPcc     ;%FTRAPUGT⓪)DC.L    MneFTRAPcc     ;%FTRAPULE⓪)DC.L    MneFTRAPcc     ;%FTRAPULT⓪)DC.L    MneDyOp        ;%FADD         ; Dyadic Operations⓪)DC.L    MneDyOp        ;%FCMP⓪)DC.L    MneDyOp        ;%FDIV⓪)DC.L    MneDyOp        ;%FMOD⓪)DC.L    MneDyOp        ;%FMUL⓪)DC.L    MneDyOp        ;%FREM⓪)DC.L    MneDyOp        ;%FSCALE⓪)DC.L    MneDyOp        ;%FSGLDIV⓪)DC.L    MneDyOp        ;%FSGLMUL⓪)DC.L    MneDyOp        ;%FSUB⓪)DC.L    MneMoOp        ;%FABS         ; Monidic Operations⓪)DC.L    MneMoOp        ;%FACOS⓪)DC.L    MneMoOp        ;%FASIN⓪)DC.L    MneMoOp        ;%FATAN⓪)DC.L    MneMoOp        ;%FATANH⓪)DC.L    MneMoOp        ;%FCOS⓪)DC.L    MneMoOp        ;%FCOSH⓪)DC.L    MneMoOp        ;%FETOX⓪)DC.L    MneMoOp        ;%FETOXM1⓪)DC.L    MneMoOp        ;%FGETEXP⓪)DC.L    MneMoOp        ;%FGETMAN⓪)DC.L    MneMoOp        ;%FINT⓪)DC.L    MneMoOp        ;%FINTRZ⓪)DC.L    MneMoOp        ;%FLOGN⓪)DC.L    MneMoOp        ;%FLOGNP1⓪)DC.L    MneMoOp        ;%FLOG10⓪)DC.L    MneMoOp        ;%FLOG2⓪)DC.L    MneMoOp        ;%FNEG⓪)DC.L    MneMoOp        ;%FSIN⓪)DC.L    MneMoOp        ;%FSINH⓪)DC.L    MneMoOp        ;%FSQRT⓪)DC.L    MneMoOp        ;%FTAN⓪)DC.L    MneMoOp        ;%FTANH⓪)DC.L    MneMoOp        ;%FTENTOX⓪)DC.L    MneMoOp        ;%FTWOTOX⓪)DC.L    MneDualMoOp    ;%FSINCOS      ; Dual Monadic Operation⓪ *)⓪ END⓪ END MneJmpTab;⓪ ə
  2. (* $000082EC$00010C48$00010CCD$00010D53$0002194C$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948$00008F25$FFFCB948$00017E98$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948$0001E2F9$0000899F$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948$FFFCB948Ç$0001217AT.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$00008F35$00008F99$000121F8$000228EF$0001212B$0001219D$0001217A$00012197$0001214A$00020855$00020876$000208AE$00020894$00020870$00001D59$00001D83ñÇâ*)
  3.